Escape Characters

Character to be escapedEscape SequenceRemark
%%% 
^^^May not always be required in doublequoted strings, but it won’t hurt
&^&
<^<
>^>
|^|
^’Required only in the FOR /F « subject » (i.e. between the parenthesis), unless backq is used
`^`Required only in the FOR /F « subject » (i.e. between the parenthesis), if backq is used
,^,Required only in the FOR /F « subject » (i.e. between the parenthesis), even in doublequoted strings
;^;
=^=
(^(
)^)
!^^!Required only when delayed variable expansion is active
« «  »Required only inside the search pattern of FIND
\\\Required only inside the regex pattern of FINDSTR
[\[
]\]
« \ »
.\.
*\*
?\?

Source

Purge de fichiers FORFILES chemins UNC

set w_dir=%1
set w_nb_jrs=%2

echo Purge de la Directorie : %w_dir%
echo Purge des fichiers et dossiers vieux de plus de %w_nb_jrs% jours

echo Espace avant purge
dir %w_dir%..

pushd %w_dir%

dir
echo « ———————————————–« 
FORFILES /S /D -%w_nb_jrs% /C « cmd /c dir @path » 2> nul
set erreurcode=%errorlevel%
if « %erreurcode% » equ « 0 » goto SUITE1
goto FIN

:SUITE1
forfiles /S /D -%w_nb_jrs% /C « cmd /c del /f /q @path » 2> nul
forfiles /S /D -%w_nb_jrs% /C « cmd /c rd /S /Q @path » 2> nul
echo « Effacement des dossiers et fichiers ci-dessus »
echo Espace après purge
dir

:FIN
PopD
set errorlevel=0

accent avec robocopy

Lorsque le chemin vers un répertoire source ou destination de votre script robocopy contient un accent, il est possible, selon la configuration de votre système Windows, que vous obteniez une erreur. En effet DOS n’arrivera pas à interpréter cet accent et ne va donc pas trouver le chemin du répertoire spécifié …

Afin que les accents soient correctement interprétés il suffit de rajouter la commande suivante au début de votre script.

chcp 1252

La commande chcp, intégrée nativement à Windows, permet de modifier le jeu de caractère (ou « code page ») de votre système d’exploitation. Le code page 1252 est le code page original de Windows, pour l’Europe de l’ouest et donc la France. Il peut arriver que le code page d’un système ne soit pas 1252 et que les accents soient donc mal interprétés.

En ajoutant cette commande en début de script, vous améliorerez leur portabilité afin qu’ils fonctionnent sur n’importe quel ordinateur ayant un code page différent.

Power OFF – Power ON PowerCLI

ATTENTION avec Vtom : la queue_ps1 doit contenir :

%PATH_POWERSHELL%\powershell.exe -ExecutionPolicy UnRestricted -NonInteractive -File %TOM_SCRIPT% %arg%

Tests fait sur VWJES_TST et PRD.

Lancer Windows Power Shell en administrateur

PowerShell Set-ExecutionPolicy UnRestricted   

L:\Soft\VMware\Scripts\Initialize-PowerCLIEnvironment.ps1   

Connect-VIServer -Server wctsrv0001.wabtec.com -Protocol https -User ad.wabtec.com\srvWCTVtom -Password 'Y------#' 

Get-PowerCLIConfiguration 

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false 

Get-Vm vsch1 

Start-Vm vsch1 

Stop-Vm vsch1 

—– Autres commandes

Get-Help Set-ExecutionPolicy

PowerShell Set-ExecutionPolicy AllSigned

—- script —

//WCTSRV0016/Batch_win/vtom_VM_power.ps1
P1 : nom_du_serveur
P2 : start ou stop

Param( 
 [string]$w_vm = $Args[0],
 [string]$w_action = $Args[1]
 )
 Write-Host "La VM est : $w_vm"
 Write-Host "Action : $w_action"
 PowerShell Set-ExecutionPolicy UnRestricted
 L:\Soft\VMware\Scripts\Initialize-PowerCLIEnvironment.ps1 -w_vm -w_action 
 Connect-VIServer -Server wctsrv0001.wabtec.com -Protocol https -User ad.wabtec.com\srvWCTVtom -Password 'YN6$P&G6j#'
 $WarningPreference = 'SilentlyContinue'
 $Error.Clear()
 Get-VM "$w_vm" |select Name, PowerState
 if ( $w_action -like "stop" ) {
 Stop-VM -VM "$w_vm" -Confirm:$false
 $statu = Get-VM "$w_vm" |select PowerState
     if ( $statu -like "@{PowerState=PoweredOff}" ) {
         Write-Host "Power : OFF"
         exit 0
     } else {
         Write-Host "Power : ON"
         exit 1
     }
 } else {
 Start-VM -VM "$w_vm" -Confirm:$false
 $statu = Get-VM "$w_vm" |select PowerState
     if ( $statu -like "@{PowerState=PoweredOn}" ) {
         Write-Host "Power : ON"
         exit 0
     } else {
         Write-Host "Power : OFF"
         exit 1
         }
 }

présence fichier dans dossier

echo off

setlocal enabledelayedexpansion
set w_dos=\\Vstream.ft.grp\g$\M3toECM\WIT_ECM\*.* \\vstream.ft.grp\g$\M3toECM\LPZ_ECM\*.* \\vstream.ft.grp\g$\M3toECM\NSF_ECM\*.*
set f_tmp=L:\Soft\VTOM\logs\liste_fic_ecm.txt
set /a cpt=0

dir /b %w_dos% > %f_tmp%
for /f « delims= » %%i in (‘type %f_tmp%’) do set /a cpt+=1
echo nombre de fichier à traiter : !cpt!
IF %cpt% EQU 0 exit /B 0 (on sort)
il y a des fichiers à traiter

robocopy MOVE fichiers

//WCTSRV0016/Batch_win/robocopy_dir_MOVE.bat
test dossier vide
move des fichiers
horodatage du log
affichage du log

setlocal enabledelayedexpansion
echo === Transfert Robocopy ===

rem ------------------------------
rem Horodatage
reg add "HKCU\Control Panel\International" /v sShortDate /d "dd-MM-yyyy" /f
for /F "tokens=1-4 delims=/" %%a in ('echo %date:~0,10%') do set w_date=%%c%%b%%a
for /F "tokens=1-4 delims=-" %%a in ('echo %date:~0,10%') do set w_date=%%c%%b%%a
for /F "tokens=1-4 delims=:" %%a in ('echo %time:~0,8%') do set w_time=%%a%%b%%c
set w_horo=%w_date%_%w_time%


set w_source=%1
set w_cible=%2
rem ------ horodatage du log 
set w_log=%3\%w_horo%_%TOM_JOB%.vlog

set /a w_err=8

echo source : %w_source%
echo cible : %w_cible%
echo log : %w_log%


echo --- source -------------
rem -- recherche si fichier à traiter
set f_tmp=L:\Soft\VTOM\logs\liste_fic_%TOM_JOB%.txt
set /a cpt=0
dir /b %w_source%  > %f_tmp%
for /f "delims=" %%i in ('type %f_tmp%') do set /a cpt+=1
echo nombfre de fichier à traiter : !cpt!
IF !cpt! EQU 0 exit /B 0

dir %w_source%

echo --- cible avant -------------
dir %w_cible%

echo Move 
echo robocopy %w_source% %w_cible% /S /Move /w:10 /r:2 /LOG+:%w_log%
robocopy %w_source% %w_cible% /S /Move /w:10 /r:2 /LOG+:%w_log%
set /a w_err=%w_err%+%errorlevel%
mkdir %w_source%

echo --- cible après -------------
dir %w_cible%

rem ---- affichage du log
type %w_log%

set /a w_err=%w_err%-8
exit /B %w_err%

Manipulation de chaîne de caractères Linux

Assigner et afficher une variable

En BASH, une variable est identifiée par l’usage du ‘$’, sauf pour lui attribuer une valeur où l’on omet le ‘$’.

#assignation de la variable
96386@kws:~$ maVariable='Ceci est une chaine de caractères'
    
#utilisation de la variable
96386@kws:~$ echo $mavariable
Ceci est une chaine de caractères

Il est également possible d’utiliser une syntaxe plus explicite qui permet de délimiter clairement quel est le nom de la variable et d’éviter donc plus facilement des erreurs de nommage.

96386@kws:~$ file='homework'
96386@kws:~$ ls /mnt/data/$file_save.doc

Dans cet exemple la variable utilisée est ‘file_save’ et non ‘file’. Le résultat ne sera donc absolument pas celui qu’on attend !

Une façon de délimiter clairement le nom de la variable est d’utiliser les crochets ‘{}’.

    96386@kws:~$ file='homework'
    96386@kws:~$ ls /mnt/data/${file}_save.doc

La variable utilisée ici sera ‘file’ et a pour valeur ‘homework’. Ce qui donne donc la commande suivante une fois la variable substituée.

96386@kws:~$ ls /mnt/data/homework_save.doc

C’est cette syntaxe qui sera utilisée tout au long de cet article.

Modifier la casse

Un des traitements les plus courants est de modifier la casse, que cela soit de passer tout en majuscule, ou en minuscule.

Tout passer en minuscule

Le changement de la casse en minuscule se fait à l’aide de ‘,,’ comme ceci :

96386@kws:~$ test="Hello World !"
96386@kws:~$ echo ${test,,}
hello world !

Tout passer en majuscule

Le changement de la casse en majuscule se fait à l’aide de ‘^^’ comme ceci :

96386@kws:~$ test="Hello World !"
96386@kws:~$ echo ${test^^}
HELLO WORLD !

Ainsi un ‘case’ comme celui-ci

case ${userInput} in
    "oui"|"Oui"|"OUI"|"O"|"o"|"YES"|"Yes"|"yes"|"Y"|y")
        # action si l'utilisateur répond oui
        ;;
    "non"|"Non"|"NON"|"NO|"No"|"no"|"N"|"n")
        # action si l'utilisateur répond non
        ;;
esac

devient simplement :

case ${userInput,,} in
    "oui"|"yes"|"y"|"o")
        # action si l'utilisateur répond oui
    ;;
    "non"|"no"|"n")
        # action si l'utilisateur répond non
    ;;
esac

Récupérer la longueur de la chaine de caractère.

Pour récupérer la longueur d’une chaine de caractère il suffit de précéder le nom de la variable par ‘#’ comme ceci :

${#variable}

96386@kws:~$ VAR="Chaine d'une certaine longueur"
96386@kws:~$ echo ${#VAR}
30

Taille d’un tableau

Il est possible d’obtenir le nombre d’éléments d’un tableau de la façon suivante :

96386@kws:~$ unset VAR
96386@kws:~$ VAR[0]="blablabla"
96386@kws:~$ VAR[1]="azeaze"
96386@kws:~$ VAR[2]="test"
96386@kws:~$ VAR[3]="someText"
96386@kws:~$ VAR[4]=48
96386@kws:~$ VAR[5]=98985
96386@kws:~$ echo ${#VAR[*]}
6
96386@kws:~$ echo ${#VAR[@]}
6

Attention à ne pas oublier les crochets, sinon # retournera simplement la longueur du premier élément du tableau.

96386@kws:~$ unset VAR
96386@kws:~$ VAR[0]="blablabla"
96386@kws:~$ VAR[1]="azeaze"
96386@kws:~$ VAR[2]="test"
96386@kws:~$ echo ${#VAR}
9

Déterminer le nombre de paramètre passés au script

Pour connaitre le nombre de paramètres passés au script ($1, $2 …) on utilisera ‘${#*}’ et ‘${#@}

96386@kws:~$ vi test.sh
#!/bin/bash
echo "\${#*} : '${#*}' \${#@} : '${#@}'"
    
    
96386@kws:~$ bash test.sh var1 test something
${#*} : '3' ${#@} : '3'

Assignation des variables

Plutôt que d’utiliser des ‘if’, ‘else’ et d’assigner des valeurs par défaut si les variables sont vides il existe des mécanismes permettant l’usage ou l’assignation d’une valeur alternative pour ces variables.

Utiliser une alternative

La formulation ${var-alternative} permet l’utilisation d’une alternative si la variable n’est pas assignée

96386@kws:~$ unset VAR # on s'assure que la variable n'existe pas/plus
96386@kws:~$ echo "var: '${VAR-"default"}'"
var: 'default'
96386@kws:~$ VAR=""
96386@kws:~$ echo "var: '${VAR-"default"}'"
var: ''
96386@kws:~$ VAR="VALUE"
96386@kws:~$ echo "var: '${VAR-"default"}'
var: 'VALUE'

96386@kws:~$ VAR2="someVar"
96386@kws:~$ unset VAR
96386@kws:~$ echo ${VAR-$VAR2}
someVar

On constate que si la variable existe mais ne contient aucun caractère, elle n’est pas remplacée par la valeur de substitution. Pour spécifier à Bash que les variables vides sont également à remplacer nous allons utiliser la forme suivante : ${var:-alternative} (ajout du ‘:’).

96386@kws:~$ unset VAR # on s'assure que la variable n'existe pas/plus
96386@kws:~$ echo "'${VAR:-"default"}'"
'default'
96386@kws:~$ VAR=""
96386@kws:~$ echo "'${VAR:-"default"}'
'default'
96386@kws:~$ VAR="VALUE"
96386@kws:~$ echo "'${VAR:-"default"}'"
'VALUE' 
96386@kws:~$ VAR2="someVar"
96386@kws:~$ VAR=""
96386@kws:~$ echo ${VAR:-$VAR2}
someVar

Assigner une valeur par défaut

La méthode précédente permettait de retourner une valeur différente lors de l’usage de la variable mais la valeur de la variable restait inchangée. La syntaxe ${var= »alternativeValue »} permet de d’assigner une valeur à la variable si celle ci n’est pas déclarée .

96386@kws:~$ unset VAR # on s'assure que la variable n'existe pas/plus
96386@kws:~$ echo "var :'$VAR'"
var :''
96386@kws:~$ echo "var :'${VAR=default}'"
var :'default'
96386@kws:~$ echo "var :'$VAR'"
var :'default'

Comme pour l’utilisation d’une valeur de substitution, il est possible de différencier une variable non assignée d’une variable vide. ${VAR:=default} permet de remplacer la valeur des variables déclarée mais vides.

96386@kws:~$ VAR=""
96386@kws:~$ echo "var :'$VAR'"
var :''
96386@kws:~$ echo "var :'${VAR=default}'"
var :''
96386@kws:~$ echo "var :'$VAR'"
var :''
96386@kws:~$ echo "var :'${VAR:=default}'"
var :'default'
96386@kws:~$ echo "var :'$VAR'"
var :'default'

Utiliser une alternative et quitter

Toujours dans la liste des valeurs alternatives, il est possible d’utiliser une valeur par défaut et de quitter le programme avec un code de de retour ‘1’. La formulation est la suivante : ${var?alternative]

96386@kws:~$ unset var
96386@kws:~$ parametre=${VAR?"Var is not set"}
bash: VAR: Var is not set

La formulation reste la même pour spécifier que l’on souhaite aussi filtrer les variables définies mais vides : ${var:? »Var is not set or empty »}

96386@kws:~$ var=""
96386@kws:~$ parametre=${VAR:?"Var is not set or empty"}
-bash: var: Var is not set or empty

Extraire une sous-chaine

Il est courant de travailler sur des fractions d’une chaine de caractères. Il est possible d’obtenir ses éléments avec la fonction suivante : ${var:<position>:<longueur>}

96386@kws:~$ VAR="Hello world !"
96386@kws:~$ echo "'${VAR:6}'"
'world !'
96386@kws:~$ echo "'${VAR:1:4}'"
'ello'
96386@kws:~$ echo "'${VAR:6:20}'"
'world !'
96386@kws:~$ echo "'${VAR::3}'"
'first 3'
96386@kws:~$ echo "'${VAR: -3}'"
'd !'
96386@kws:~$ echo "'${VAR::-1}'"
'Hello world '

Supprimer une sous-chaine

Il est possible de se débarrasser rapidement de chaine de caractères précédant ou suivant la partie recherchée, pour récupérer le nom d’un fichier sans les répertoires auquel il appartient ou sans son extension par exemple !

‘#’ Supprimer depuis le début de la chaine

L’utilisation du ‘#’ (${var#pattern}) permet de supprimer la première portion correspondant au pattern que l’on passe en paramètre.

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR#h*o}'"
' world !'.

##

Le double ‘#’ (${var##pattern) s’utilise de la même façon que le simple ‘#’ à la différence que celui-ci supprimera la chaine correspondante la plus longue.

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR##h*o}'"
'rld !'

‘%’ Supprimer depuis la fin de la chaine

Le ‘%’ (${var%pattern}) permet de supprimer la chaine correspondante à notre pattern depuis la fin de notre variable

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR%o*}'"
'hello w'

%%

Comme pour le ‘##’ le double %% permet de sélectionner la plus grande chaine, ici depuis la fin de la variable.

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR%%o*}'"
'hell'

A noter que ces outils ne permettent la suppression de chaine de caractères que depuis l’un des bords de la variable.

Pour supprimer une sous-chaine présente au milieu de la variable on pourra utiliser de remplacement de chaine de caractère ‘/’ sans lui passer de chaine de remplacement. Pour supprimer la première occurence :

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR/o/}'"
'hell world !'
96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR/l*o/}'"
'herld !'

Pour supprimer l’ensemble des occurrences on utilisera ‘//’

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR//o/}'"
'hell wrld !'

Exemple d’utilisation

Les traitements de chaines de caractère que nous voulons voir sont très pratiques lorsque, par exemple, de la manipulation de fichiers. Prenons ici comme exemple le fichier ‘/etc/apache2/sites-available/000-default.conf’ et regardons ensemble comment extraire le path, le nom du fichier et son extension.

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'

Pour récupérer le path, nous allons simplement tout supprimer depuis la fin du fichier jusqu’au premier ‘/’ rencontré

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ filePath=${file%/*}
96386@kws:~$ echo $filePath 
/etc/apache2/sites-available

Pour récupérer le fichier, nous allons procéder de la façon inverse : nous allons tout supprimer depuis le début jusqu’au dernier ‘/’

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ fileName=${file##*/}
96386@kws:~$ echo $fileName 
000-default.conf

Pour supprimer l’extension de notre fichier nous allons supprimer tout les caractères depuis la fin jusqu’au premier ‘.’

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ fileNameShort=${fileName%.*}
96386@kws:~$ echo $fileNameShort 
000-default

Et enfin pour extraire l’extension nous allons garder uniquement ce qu’il reste après le dernier ‘.’

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ fileExtension=${fileName##*.}
96386@kws:~$ echo $fileExtension 
conf

Remplacement de sous-chaine

En plus des possibilités de suppression et d’extraction de sous-chaine de caractère, il est également possible de remplacer certaines expressions dans notre variable avec l’utilisation du ‘/’.

Remplacer le premier élément trouvé.

Pour remplacer le première élément correspondant, on utilisera la syntaxe suivante :${var/pattern/remplacement/}.

96386@kws:~$ VAR="blablabla"
96386@kws:~$ echo "'${VAR/a/o}'"
'bloblabla'
96386@kws:~$ echo "'${VAR/bl/pl}'"
'pliblablobleblu'
96386@kws:~$ echo "'${VAR/bla/123}'"
'bli123blobleblu'

Remplacer l’ensemble des éléments correspondants.

Pour remplacer l’ensemble des éléments correspondants par la chaine passé en deuxième paramètre nous utiliserons le double ‘/’.

${string//substring/replacement}

96386@kws:~$ VAR="blablabla"
96386@kws:~$ echo "'${VAR//a/o}'"
'blobloblo'
96386@kws:~$ VAR="bliblablobleblu"
96386@kws:~$ echo "'${VAR//bl/pl}'"
'pliplaplopleplu'

Remplacer le dernier élément correspondant.

Pour remplacer la plus grande correspondance depuis le début de la chaine on utilisera le ‘/#’

${string/#substring/replacement}

96386@kws:~$ var="Hello, world !"
96386@kws:~$ echo "'${var/#*o/i}'"
'irld !'

Ce qui est similaire à ‘/’

96386@kws:~$ echo "'${VAR/*o/i}'"
'irld !'

Pour remplacer la plus longue correspondance depuis la fin de la chaine de caractère, on utilisera le ‘/%’

${string/%substring/replacement}

96386@kws:~$ var="Hello, world !"
96386@kws:~$ echo "'${var/%o/i}'"
'Hello, world !'
96386@kws:~$ echo "'${var/%o*/il}'"
'Helli'

Ce qui est similaire à ‘/’

96386@kws:~$ echo "'${VAR/o*/i}'"
'irld !'

test transfert ftp

set ftp_log=transfert_ftp.log

for /f « delims= » %%a in (‘find /C « 150 Opening » ^<%ftp_log%’) do set /a w_files=%%a
@echo nombre de fichier a transferer : %w_files%

for /f « delims= » %%a in (‘find /C « 226 Transfer complete » ^<%ftp_log%’) do set /a w_files_ok=%%a
@echo nombre de fichier transfere OK : %w_files_ok%

IF %w_files% NEQ %w_files_ok% (type %ftp_log% & echo « Terminé en erreur » & exit /B %errorlevel%)

echo Transfert OK

vtom_ftp_win_linux_mget.bat

@echo off
echo Transfert FTP… WINDOWS

set w_ftp=%1
set w_user=%2
set w_pwd=%3
set w_source=%4
set w_cible=%5
set l_cible=%6

echo source : (%w_ftp%) %w_source%
echo cible : (%TOM_HOST%) %l_cible%%w_cible%
echo ——————————-
echo.
%l_cible%

IF EXIST %w_cible% (
DEL /F /Q %w_cible%
) ELSE (
MKDIR %w_cible%
)

cd %w_cible%

echo.
cd %w_dir%

set dir_logs=%ABM_LOGS%
set ftp_log=%dir_logs%transfert_ftp_%TOM_JOB%.log
set ftp_ini=C:\temp\FTP_%TOM_JOB%_envoi.ini

rem ****************************************************
rem Récupération d’un fichier avec un get
rem ****************************************************
echo open %w_ftp%>%ftp_ini%
echo %w_user%>>%ftp_ini%
echo %w_pwd%>>%ftp_ini%
echo cd %w_source%>>%ftp_ini%
echo ls -l>>%ftp_ini%
echo mget *.*>>%ftp_ini%
echo bye>>%ftp_ini%

ftp.exe -i -s:%ftp_ini% 1>%ftp_log%
Findstr « Transfer complete » %ftp_log%
IF %ERRORLEVEL% NEQ 0 (echo « Terminé en erreur » & exit /B %errorlevel%)

type %ftp_log%
echo ——————————-
echo.
dir

 

———- Param —

WCTSRV00554.wabtec.com
{oracle}
{ora112_pwd}
/u02/DUMP/FORMSPRD
\WCTSRV0060\FORMSPRD\{dt_aujourdhui,J_NOM}_dump
D:

setgid setuid vtom erreur stickybit

Warning: Problem at the time of the initialization of the secondary groups.: Operation not permitted
Warning: Error setgid(54321), Operation not permitted.: Operation not permitted
Warning: Error setuid(54321), Operation not permitted.: Operation not permitted

——————-

cd /opt/vtom/abm/bin/

ll bdaemon
-rwxr-xr-x 1 vtom vtom 3208520 Mar 13 09:46 bdaemon

chown root:root bdaemon
chmod 4755 bdaemon

-rwsr-xr-x 1 root root 3208520 Mar 13 09:46 bdaemon

 

 

pushd – popd

Je me place dans C: (par exemple)
C:
Je suis sur le volume C:
dir m’affiche le contenu de C:

pushd \\serveur\dossierA\dossierB\

pushd monte virtuellement un volume est y entre
Je suis donc dans \\serveur\dossierA\dossierB\
dir m’affiche le contenu de \\serveur\dossierA\dossierB\
….
Je peux manipuler des fichiers par exemple
Je fais ce que je veux à cet endroit.
….

popd

Je reviens dans à l’endroit où j’étais avant le pushd (C: dans notre exemple)

WinSCP en ligne de commande

L:\soft\winscp\WinSCP.com /log= »C:\temp\winscp_lin_liste.log » /command « open ftpes://user:password@host:port/ » « commande_1 » « commande_2 » « commande_3″ …

exemple :
L:\soft\winscp\WinSCP.com /log= »C:\temp\winscp_lin_liste.log » /command « open ftpes://M3:xxxx@172.25.xxx.xxx:990/ » « cd Prod/Purchasing_DWH » « ls *.csv » « exit »

Nettoyage windows

Supprimer le contenu des dossiers :
C:\Windows\SoftwareDistribution
C:\Windows\ccmcache

echo off

SETLOCAL enableExtensions enableDelayedExpansion

set w_user=%1

dir | findstr "free"

set f_tmp=c:\temp\liste_%w_user%.txt

dir C:\Users\%w_user%* /B > %f_tmp%

type %f_tmp%

rem rd /s c:\$Recycle.Bin
rem del /S /Q /F C:\Temp
rem del /S /Q /F C:\Windows\Temp

for /f %%i in (%f_tmp%) do (

del /S /Q /F C:\Users\%%i\AppData\Local\Temp 2>1
del /S /Q /F "C:\Users\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files" 2>1

)

dir | findstr "free"

espace dans les noms de fichiers

Remplacer les espaces par des _ dans les noms de fichier d’un dossier.

Sous Windows

cd mon_dossier
for /f "delims=" %%a in ('dir /b') do call :cmd "%%a"
exit
:cmd
set fichierbck=%~1
set fichier=%fichierbck: =_%
ren "%fichierbck%" "%fichier%"

Sous Linux

rename 's/[[:blank:]]/_/g' *

Remplacement temporaire

#IFS = field separator, so only accept end of line and not space as filename may contain space
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

for v_fic in `find ${w_rep_purge}/ -type f -mtime ${w_jour_purge} -name "*.${w_extension}" | grep ${w_grep}`
 do
    echo " - Suppression du fichier [${v_fic}] ..."
#    rm -f ${v_fic}
    ls -la ${v_fic}
 done
#IFS = restore old filed separator to not changed stand shell comportement
IFS=$SAVEIFS

Tailles d’une liste de fichiers dans un dossier

@echo Off
setlocal enabledelayedexpansion
cls
set l_fic=l:\Soft\Vtom\temp\*.bat
set p_file=l:\Soft\Vtom\temp\liste.txt

if exist %p_file% del /S %p_file% 1> nul

dir /B %l_fic% > %p_file% 2> nul

set size=0

for /F %%I in (%p_file%) do ( 
echo %%I %%~zI 
set /a size=!size!+%%~zI 
)
 
echo --------------------------
echo taille total des fichiers %size%

date et heure de fichier

le parametre /T de la commande DIR

dir /TC –> Creation
dir /TA –> Last Access
dir /TW –> Last Written

@echo off
cls 
set w_d=%date% %time:~0,5%
echo %w_d%
set fichier1=L:\Soft\VTOM\temp\archive_zip.bat
set fichier2=L:\Soft\VTOM\temp\ftp_notilus_integre_FR3.bat
echo %fichier1%
echo %fichier2%
for %%a in (%fichier1%) do set datebut=%%~ta
for %%a in (%fichier2%) do set datesource=%%~ta
rem on enleve l'espace entre date et temps
echo %fichier1% %datebut%
echo %fichier2% %datesource%
set datebut=%datebut: =-%
set datesource=%datesource: =-%
if %datebut%==%datesource% (
echo meme date
) else (
echo date differente
)