You are on page 1of 6

Echappement des caractres spciaux le caractre d'chappement des caractres spciaux en batch est le carret (^) Exemple si lon

veut ecrire dans un fichier avec echo lexpression suivante :


<?xml version="1.0" encoding="utf-8" ?> Lecriture suivante : echo <?xml version="1.0" encoding="utf-8" ?> ne fonctionne pas Mais plutt comme celle-ci : echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml devant chaque caractre spcial on met ^ > myfile.xml

Localiser les variables La dclaration d'une variable dure tout le temps pendant lequel la fentre de commande courante est ouverte. Si vous utilisez un fichier batch qui ne ferme pas la fentre de commande la fin du traitement, toutes les variables dclares par le batch restent dfinies. Si vous souhaitez limiter la porte d'une variable un ensemble d'instructions particulier, utilisez les commandes "setlocal" et "endlocal". Ainsi, pour limiter la dclaration d'une variable un bloc de code particulier, utilisez : .... setlocal set une_variable = une_valeur ...{des instructions}... endlocal ...

Variables saisies par l'utilisateur


La commande "set" peut galement accepter une saisie de l'utilisateur comme valeur pour une variable. Pour cela, on utilise le commutateur "/p". Un fichier batch attendra que l'utilisateur entre une valeur aprs l'instruction set /p nomVariable= Invite L'invite est le message affich l'utilisateur pour lui demander une saisie. Exemple :

set /p nom= Entrez votre nom ? : echo Bonjour %nom% Utilisation dune variable dans une mme boucle for Il faut utiliser l'expansion retarde de variable d'environnement : On ajoute setlocal enableDelayedExpansion avant la boucle.

setlocal enableDelayedExpansion for /F %%D in (fichier) do ( for /F "tokens=4 delims=\" %%E in ("%%D") do ( set mavar=%%E echo !mavar! pause ) ) Endlocal Dcomposer un chemin de fichier contenu dans une variable Si la variable qui contient le chemin est %1, alors on peut la dcomposer de la faon suivante : %1 = Chemin complet du fichier %~n1 = nom du fichier sans l'extension %~x1 = extension du fichier %~nx1 = nom et extension du fichier

Remplacer les espaces par des _ dans les noms de fichiers @echo off for /f "delims=" %%a in ('dir /b') do call :cmd "%%a" goto fin :cmd set fichierbck=%~1 REM en general la syntaxe set var=%var:a=b% rem permet de remplacer n'importe quelle caractere a par b dans la variable b rem si l'on veut remlacer un espace avec _ il suffit de mettre rem var=%var: =_% rem est pour supprimer tout simplement les espaces vide rem var=%var: =% set fichier=%fichierbck: =_% @echo %fichier% ren "%fichierbck%" "%fichier%" :fin
Supprimer un mot spcifique partir dun fichier texte (ASCCI) FIND.EXE /V "String" <anyfile> %temp%.\anyfile.tmp COPY/Y %temp%.\anyfile.tmp anyfile DEL %temp%.\anyfile.tmp

Lister des fichiers dans un batch Windows Pour lister les fichiers d'un dossier donn, il suffit d'utiliser la commande FOR de la faon suivante :
for %%f in (<un chemin>\*.<ext>) do <une commande>

On rcupre le chemin complet (dossier + nom du fichier) du fichier dans la variable %%f. Cette variable est obligatoirement compose d'une seule lettre. Le plus simple pour effectuer des traitements sur les fichiers est d'utiliser une fonction pour laquelle on passe le nom du fichier : Voici un exemple :
for %%f in (C:\temp\*.css) do call :process %%f goto :eof :process SET fichier=%1 echo Fichier : %fichier%

N'oubliez pas le goto :eof la fin du script sinon il continuera en passant sur les fonctions dfinies en dessous (qui retournerons au mieux des erreurs pour fichiers introuvables, au pire des rsultats inattendus) Le script affichera des rsultats du type
Fichier : C:\temp\styles.css

Si l'on souhaite ne rcuprer que le nom du fichier sans le chemin, il suffit d'appeler la ligne suivante :
for %%f in (C:\temp\*.css) do call :process %%~nxf

On utilise les caractres de substitution en faisant prcder la variable par un tilde (~) et l'info rcuprer parmi, entre autre (cf liste complte dans l'aide de FOR (FOR /?)) :

d : lettre de lecteur p : chemin d'accs (hors lettre de lecteur) n : nom de fichier (sans l'extension) x : extension de fichier (avec le "." initial) s : chemin complet avec des noms courts a : attributs du fichier t : date du fichier z : taille du fichier (en octets)

En bref, %%f = %%~dpnxf

Et pour lister les dossiers ?

Rien de plus simple :


for /f %%i In ('dir /b /ad "C:\Windows"') Do ...

Manipuler des noms de fichiers


On peut dcomposer le nom dun fichier comme ceci
Si %A = nom du fichier %~nA = nom du fichier sans l'extension %~xA = extension du fichier %~nxA = nom et extension du fichier %~fA = chemin complet du fichier %~sfA = Renvoie le chemin complet au format court Exemple : @echo off setlocal enableDelayedExpansion echo nom^| extension^| disque^|

chemin^| complet

FOR /f "tokens=*" %%A in ('dir /b' ) do ( set v=%%A echo Nom du fichier : %%~nA echo Extension du fichier: %%~xA echo Disque : %%~dA echo Chemein complet : %%~fA echo ------------------------------------------echo. )

Gnrer un fichier XML a partir dun batch @echo off REM la boucle va parcourir ce fichier meme REM pour localiser le texte entre ___DATA___ et ___ATAD___ REM et l'ecrire dans un fichier xml.txt set filetosave= xml.txt if EXIST %filetosave% DEL/P %filetosave% for /f "useback delims=" %%A in (%0) do ( if "%%A"=="___ATAD___" set $= if defined $ (echo %%A >> %filetosave% ) if "%%A"=="___DATA___" set $=1 )

goto :eof ___DATA___ <?xml version="1.0" encoding="utf-8" ?> <root> <data id="1"> hello world </data> </root> ___ATAD___

Exercice : Lire les noms des fichiers d'un dossier, crer un dossier par fichier portant le mme nom sans l'extention et dplacer le fichier dans son dossier nous ne considerons ici que les fichier txt @echo off for %%f in (*.txt) do (call :crearep "%%f") goto end :crearep echo transfert de %1 mkdir %~n1 move %1 %~n1 >nul :end Cration de menu avec IF ELSE @echo off @echo MENU avec IF ELSE :debut cls echo Faire un choix echo (1) premier choix echo (2) deuxieme choix echo (3) troisieme choix echo (4) Quitter SET /P val=

IF %val%==1 ( set Message="premier choix" ) ELSE ( IF %val%==2 ( set Message="deuxieme choix" ) ELSE (

IF %val%==3 ( set Message="troisieme choix" ) ELSE ( IF %val%==4 ( set Message="Quitter" ) ELSE ( set Message="erreur de saisie" ) ) ) ) @echo %Message% pause IF NOT %val%==4 GOTO debut

You might also like