« Batch » : différence entre les versions
(→For) |
|||
(14 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:Windows]] | |||
= Liens = | = Liens = | ||
* http://1100f.free.fr/Batchs/index.htm | * http://1100f.free.fr/Batchs/index.htm | ||
Ligne 70 : | Ligne 71 : | ||
REM Supprimer plusieurs fichiers | REM Supprimer plusieurs fichiers | ||
del MonFichier1 MonFichier2 *.txt | del MonFichier1 MonFichier2 *.txt | ||
</kode> | |||
<filebox fn='ShortNamePath.cmd'> | |||
@ECHO OFF | |||
REM uses the current directory if no parameter is supplied | |||
if '%1'=='' (%0 .) else echo %~s1 | |||
</filebox> | |||
<kode lang='dos'> | |||
ShortNamePath.cmd 'C:\Program Files (x86)\' | |||
REM C:\PROGRA~2\ | |||
</kode> | </kode> | ||
Ligne 169 : | Ligne 182 : | ||
|} | |} | ||
=Tail= | = Tail = | ||
<kode lang='dos'> | |||
REM Equivalent du tail de bash | |||
REM obtient le nombre de ligne du fichier | REM obtient le nombre de ligne du fichier | ||
for /f "tokens=3" %%f in ('find /c /v "" fichier.txt') do set nbLines=%%f | for /f "tokens=3" %%f in ('find /c /v "" fichier.txt') do set nbLines=%%f | ||
Ligne 181 : | Ligne 191 : | ||
REM affiche les 13 dernière lignes | REM affiche les 13 dernière lignes | ||
for /f "skip=%nbSkippedLines% delims=" %%d in (fichier.txt) do echo %%d | for /f "skip=%nbSkippedLines% delims=" %%d in (fichier.txt) do echo %%d | ||
</ | </kode> | ||
=Goto et label= | = Goto et label = | ||
<kode lang='dos'> | |||
< | |||
:label | :label | ||
commande | commande | ||
Ligne 195 : | Ligne 201 : | ||
REM permet de se rendre directement à la fin du script | REM permet de se rendre directement à la fin du script | ||
goto :eof | goto :eof | ||
</ | </kode> | ||
= | = [http://www.robvanderwoude.com/if.php If] = | ||
http://www.robvanderwoude.com/if.php | <kode lang='dos'> | ||
< | |||
if [not] test commande else commande | if [not] test commande else commande | ||
Ligne 213 : | Ligne 214 : | ||
commande2 | commande2 | ||
) | ) | ||
</ | </kode> | ||
==Tests booléen== | == Tests booléen == | ||
<kode lang='dos'> | |||
< | |||
REM l'utilisation de guillemets permet de gérer les espaces. | REM l'utilisation de guillemets permet de gérer les espaces. | ||
REM mais cela pose problème | REM mais cela pose problème | ||
Ligne 236 : | Ligne 233 : | ||
REM test sans la casse | REM test sans la casse | ||
if /i z==Z | if /i z==Z | ||
</ | </kode> | ||
==Test l'existence d'un fichier== | == Test l'existence d'un fichier == | ||
<kode lang='dos'> | |||
< | |||
if exist "C:\dossier\fichier.txt" commande | if exist "C:\dossier\fichier.txt" commande | ||
</ | </kode> | ||
=FINDSTR= | = FINDSTR = | ||
==GREP like== | == GREP like == | ||
<kode lang='dos'> | |||
< | |||
commande | findstr /C:"phrase à chercher" | commande | findstr /C:"phrase à chercher" | ||
</ | </kode> | ||
==Expressions rationnelles== | == Expressions rationnelles == | ||
<kode lang='dos'> | |||
< | |||
findstr /r "expression" fichier | findstr /r "expression" fichier | ||
REM les caractères spéciaux tels que [ ou " doivent être annuler avec \ | REM les caractères spéciaux tels que [ ou " doivent être annuler avec \ | ||
Ligne 268 : | Ligne 253 : | ||
findstr /r "\[assembly:.AssemblyVersion(\"[0-9\.]*\")\];" AssemblyInfo.cs | findstr /r "\[assembly:.AssemblyVersion(\"[0-9\.]*\")\];" AssemblyInfo.cs | ||
REM [0-9.]* suite de numéros et/ou points | REM [0-9.]* suite de numéros et/ou points | ||
</ | </kode> | ||
= Lire les entrées du clavier = | = Lire les entrées du clavier = | ||
Ligne 313 : | Ligne 297 : | ||
L'association extension fichier est enregistrée dans {{boxx|HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts}} | L'association extension fichier est enregistrée dans {{boxx|HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts}} | ||
=MessageBox= | = MessageBox = | ||
Il n'existe pas de MessageBox à proprement parler, mais il existe des astuces. | Il n'existe pas de MessageBox à proprement parler, mais il existe des astuces. | ||
<kode lang='dos'> | |||
< | |||
REM msg * : envoie un message à toute les sessions | REM msg * : envoie un message à toute les sessions | ||
msg * Message | msg * Message | ||
Ligne 325 : | Ligne 306 : | ||
REM mode : taille de la fenêtre, color : couleur du texte et du fond | REM mode : taille de la fenêtre, color : couleur du texte et du fond | ||
start %comspec% /c "mode 40,10&color 0a&title Mon Titre&echo.Message&pause>NUL" | start %comspec% /c "mode 40,10&color 0a&title Mon Titre&echo.Message&pause>NUL" | ||
</ | </kode> | ||
=Menu= | = Menu = | ||
<kode lang='dos'> | |||
< | |||
:menu | :menu | ||
cls | cls | ||
Ligne 344 : | Ligne 321 : | ||
if errorlevel 1 goto 1 | if errorlevel 1 goto 1 | ||
goto menu | goto menu | ||
</ | </kode> | ||
{{warn | {{boxx|CHOICE}} ne fonctionne pas sous XP.}} | |||
<kode lang='dos'> | |||
< | |||
:menu | :menu | ||
cls | cls | ||
Ligne 364 : | Ligne 337 : | ||
if "%choice%"=="2" goto 2 | if "%choice%"=="2" goto 2 | ||
goto menu | goto menu | ||
</ | </kode> | ||
=Définir des Alias comme dans bash= | = Définir des Alias comme dans bash = | ||
<kode lang='dos'> | |||
< | |||
@echo off | @echo off | ||
Ligne 377 : | Ligne 346 : | ||
@doskey py3=C:\Python32\python.exe $* | @doskey py3=C:\Python32\python.exe $* | ||
REM $* permet le passage d'arguments de l'alias vers la cible | REM $* permet le passage d'arguments de l'alias vers la cible | ||
</ | </kode> | ||
Pour que les alias soient effectifs dès le démarrage de la console, il faut modifier le registre :<br/> | Pour que les alias soient effectifs dès le démarrage de la console, il faut modifier le registre :<br/> | ||
Ligne 403 : | Ligne 371 : | ||
</kode> | </kode> | ||
=Utilisateurs et groupes= | = Utilisateurs et groupes = | ||
<kode lang='dos'> | |||
< | |||
REM créer un nouvel utilisateur | REM créer un nouvel utilisateur | ||
net user MonUtilisateur /add | net user MonUtilisateur /add | ||
Ligne 418 : | Ligne 383 : | ||
REM affecter l'utilisateur à un groupe | REM affecter l'utilisateur à un groupe | ||
net localgroup MonGroupe MonUtilisateur /add | net localgroup MonGroupe MonUtilisateur /add | ||
</ | </kode> | ||
=Mail= | = Mail = | ||
Ouvrir le client mail par défaut.<br/> | Ouvrir le client mail par défaut.<br/> | ||
Start permet d'ouvrir le nouveau mail dans un autre processus. Le code continue donc à s'exécuter.<br/> | Start permet d'ouvrir le nouveau mail dans un autre processus. Le code continue donc à s'exécuter.<br/> | ||
Pour annuler le caractère % il faut en mettre un deuxième. (<u>Rappel</u> : %20=espace %0A=\n ) | Pour annuler le caractère % il faut en mettre un deuxième. (<u>Rappel</u> : %20=espace %0A=\n ) | ||
<kode lang='dos'> | |||
< | |||
REM sur la même ligne | REM sur la même ligne | ||
start mailto:dev@princeps.com?subject=Le%%20suje | start mailto:dev@princeps.com?subject=Le%%20suje | ||
Ligne 434 : | Ligne 396 : | ||
^&bcc=copiecachée@princeps.com | ^&bcc=copiecachée@princeps.com | ||
^&body=Bonjour,%%0AMon%%20Message | ^&body=Bonjour,%%0AMon%%20Message | ||
</ | </kode> | ||
=FTP= | = FTP = | ||
<kode lang='dos'> | |||
< | |||
if exist ftp_config.txt del ftp_config.txt | if exist ftp_config.txt del ftp_config.txt | ||
Ligne 460 : | Ligne 418 : | ||
if exist ftp_config.txt del ftp_config.txt | if exist ftp_config.txt del ftp_config.txt | ||
</ | </kode> | ||
=Tortoise SVN= | =Tortoise SVN= | ||
[[TortoiseSVN#Ligne de commande|Ligne de commande]] | [[TortoiseSVN#Ligne de commande|Ligne de commande]] | ||
=Exemples= | = Exemples = | ||
<kode lang='dos'> | |||
REM Lecture des arguments passés au script | |||
REM test si l'argument 1 est vide. | REM test si l'argument 1 est vide. | ||
REM pas de test avec "" car %1 en contient peut-être déjà. | REM pas de test avec "" car %1 en contient peut-être déjà. | ||
Ligne 493 : | Ligne 447 : | ||
pause | pause | ||
goto :eof | goto :eof | ||
</ | </kode> | ||
Dernière version du 20 juillet 2020 à 17:15
Liens
- http://1100f.free.fr/Batchs/index.htm
- http://www.dostips.com/DtTipsStringManipulation.php
- Quelques exemples de fichiers Batch
Astuces
REM désactive l’affichage des commandes pour tous le script @echo off REM Mettre en pause le programme pause REM Effacer la console cls REM Stocker une valeur dans une variable REM Attention pas d'espace avant et après le = set variable="valeur" REM Calculer une opéeration set /a resultat = 10 - 5 REM Garder la console ouverte après l’exécution d'une commande cmd /K ma_commande REM localiser un fichier. Équivalent de which where xsd |
Les fichiers BATCH ont l'extension *.bat |
Variables d'environnement
REM chemin courant %CD% REM C:\Users\Nicolas\AppData\Roaming %AppData% REM C:\Users\Moi %UserProfile% REM C:\Program Files %ProgramFiles% REM C:\Program Files (x86) %ProgramFiles(x86)% REM C:\Windows %SystemRoot% ou %WinDir% REM C:\Users\Nicolas\AppData\Local\Temp %tmp% ou %temp% |
File / Folder / Path
REM lister les short path dir /x REM Créer un dossier md MonDossier REM Supprimer un dossier et tout son contenu rd /s MonDossier REM utiliser /q pour passer outre la confirmation REM Supprimer un fichier del MonFichier REM Supprimer plusieurs fichiers del MonFichier1 MonFichier2 *.txt |
ShortNamePath.cmd |
@ECHO OFF REM uses the current directory if no parameter is supplied if '%1'=='' (%0 .) else echo %~s1 |
ShortNamePath.cmd 'C:\Program Files (x86)\' REM C:\PROGRA~2\ |
Lancer un sous-script batch
call deuxiemeScript.bat |
Les caractères accentués
Ils ne s'affichent pas correctement dans la console.
Pour les afficher, il faut éditer le fichier *.bat via la commande edit depuis la console, et les ré-écrire.
Encodage
Utilisez l'encode ANSI pour écrire vos scripts batch.
Arguments passés au script
echo %0 REM nom du fichier de script avec son chemin tel qu'il a été appelé : avec ou sans l'extension echo %1 REM argument 1 echo %~1 REM argument 1 sans les guillemets echo %* REM liste des tous les arguments REM script C:\Dossier\Fichier.bat echo %~d0 REM C: (Drive) echo %~dp0 REM C:\Dossier\ (Drive + Path) echo %~dpn0 REM C:\Dossier\Fichier (Drive + Path + Name) echo %~dpnx0 REM C:\Dossier\Fichier.bat (Drive + Path + Name + Extension) REM on peut ne vouloir que l'extension ou le nom du script echo %~x0 REM .bat echo %~n0 REM Fichier REM fonctionne avec %0..n mais pas avec les variables (SET MaVariable=...) |
For
for %variable in (ensemble) do ( commande1 commande2 ) REM utilisez %%variable au lieu de %variable pour l'utiliser dans commande |
Résultat d'une commande
REM stocke la dernière ligne retournée par commande dans variable for /f "delims=" %%i in ('commande') do set variable=%%i |
Générer une suite de chiffres
for /L %variable in (début, pas, fin) for /L %i in (1, 1, 5) REM 1 2 3 4 5 for /L %i in (5, -1, 1) REM 5 4 3 2 1 |
Splitter
for /f ["options"] %variable in (ensemble) REM ensemble: nom de fichier, "chaîne de charactères", 'commande' REM options : REM eol=c les lignes commençant par c seront ignorées REM skip=n ignorer les n premières lignes REM delims=ab remplace les délimiteurs par défaut (espace et tab) par de nouveaux délimiteurs (a et b) REM tokens=usebackq REM affiche chaque ligne du fichier une par une for /f "delims=" %%a in (fichier.txt) do echo %%a REM affichage des éléments un par un for /D %%i in ("élément1", "élément2") do echo %%i |
Nombre de lignes d'un fichier
for /f "tokens=3" %%f in ('find /c /v "" fichier.txt') do set nbLines=%%f REM selection du 3eme elements de la sortie REM ---------- fichier.txt: 18 |
Substitution
Après le do, %%i peut être substitué :
%%~i | supprimes les guillemets (") au début et à la fin |
%%~fi | fully qualified path name |
%%~di | drive letter only |
%%~pi | path only |
%%~ni | file name only |
%%~xi | file extension only |
%%~$PATH:i | searches the directories listed in the PATH environment variable and expands %i to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string. |
Tail
REM Equivalent du tail de bash REM obtient le nombre de ligne du fichier for /f "tokens=3" %%f in ('find /c /v "" fichier.txt') do set nbLines=%%f REM calcule le nombre de lignes a sauter depuis le début du fichier set /a nbSkippedLines=%nbLines%-13 REM affiche les 13 dernière lignes for /f "skip=%nbSkippedLines% delims=" %%d in (fichier.txt) do echo %%d |
Goto et label
:label commande goto label REM permet de se rendre directement à la fin du script goto :eof |
If
if [not] test commande else commande if [not] test ( commande1 commande2 ) else ( commande1 commande2 ) |
Tests booléen
REM l'utilisation de guillemets permet de gérer les espaces. REM mais cela pose problème REM si la variable contient déjà des guillements "%var1%"=="ma variable" REM dans ce cas, utilisez un autre caractère [%var1%]==[ma variable] REM test si %str% est vide : "%str%"=="" REM pour les paramètres d'entrées du script REM cette forme permet d'éliminer les double-guillements (""xxx"") "%~1"=="" REM test sans la casse if /i z==Z |
Test l'existence d'un fichier
if exist "C:\dossier\fichier.txt" commande |
FINDSTR
GREP like
commande | findstr /C:"phrase à chercher" |
Expressions rationnelles
findstr /r "expression" fichier REM les caractères spéciaux tels que [ ou " doivent être annuler avec \ findstr /r "\[assembly:.AssemblyVersion(\"[0-9\.]*\")\];" AssemblyInfo.cs REM [0-9.]* suite de numéros et/ou points |
Lire les entrées du clavier
echo question ? set /p variable= |
Code de retour
echo %errorlevel% commande.exe if errorlevel 1 ( echo Failure Reason Given is %errorlevel% exit /b %errorlevel% ) |
Manipulation de string
set X=123456789 echo %X:~2% REM 3456789. Sous-string sans les 2 premiers caractères echo %X:~2,5% REM 34567. Sous-string à partir du 3ème caractère et d'une longueur de 5 echo %X:~-3% REM 789. Sous-string des 3 derniers caractères echo %X:~-3,2% REM 78. Sous-string à partir du 3ème caractère en partant de la fin et d'une longueur de 2 echo %X:~1,-1% REM 2345678. Sous-string à partir du 2ème caractère et jusqu'à l'avant dernier echo %X:5=6% REM 123466789. Remplace tous les 5 par des 6 echo %X%%X% REM 123456789123456789. Concaténation de variables |
Associer une extension à un programme
REM créé l'entrée HKLM\SOFTWARE\Classes\.csx assoc .csx=csscript REM créé l'entrée HKLM\SOFTWARE\Classes\csscript ftype csscript=`"%APPDATA%\Code\User\cs-script.user\cscs.exe`" `"%1`" |
Ne semble pas fonctionner. |
L'association extension fichier est enregistrée dans HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
MessageBox
Il n'existe pas de MessageBox à proprement parler, mais il existe des astuces.
REM msg * : envoie un message à toute les sessions msg * Message REM Démarrer une nouvelle console et y afficher le message. %comspec% = cmd.exe REM mode : taille de la fenêtre, color : couleur du texte et du fond start %comspec% /c "mode 40,10&color 0a&title Mon Titre&echo.Message&pause>NUL" |
Menu
:menu cls echo. echo Menu echo Choix 1 echo Choix 1 echo. choice /C:12 if errorlevel 2 goto 2 if errorlevel 1 goto 1 goto menu |
CHOICE ne fonctionne pas sous XP. |
:menu cls echo. echo Menu echo Choix 1 echo Choix 2 echo. set choice= set /p choice=Votre choix? if "%choice%"=="1" goto 1 if "%choice%"=="2" goto 2 goto menu |
Définir des Alias comme dans bash
@echo off @doskey py=C:\Python27\python.exe $* @doskey py3=C:\Python32\python.exe $* REM $* permet le passage d'arguments de l'alias vers la cible |
Pour que les alias soient effectifs dès le démarrage de la console, il faut modifier le registre :
HKEY_CURRENT_USER\Software\Microsoft\Command Processor → Nouvelle Valeur chaîne : « autorun » → Données = chemin_vers_alias.bat
Shutdown, restart, sleep
REM éteint immédiatement le pc (%windir% = C:\Windows) %windir%\System32\shutdown.exe /s /t 0 REM /s → shutdown REM /r → restart REM /h → hibernate REM /l → logoff REM /t → attente en secondes REM sleep %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0 REM standby %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby REM hibernate %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate REM lock %windir%\System32\rundll32.exe user32.dll,LockWorkStation |
Utilisateurs et groupes
REM créer un nouvel utilisateur net user MonUtilisateur /add REM supprimer un utilisateur net user MonUtilisateur /delete REM définir un mot de passe net user MonUtilisateur MotDePasse REM affecter l'utilisateur à un groupe net localgroup MonGroupe MonUtilisateur /add |
Ouvrir le client mail par défaut.
Start permet d'ouvrir le nouveau mail dans un autre processus. Le code continue donc à s'exécuter.
Pour annuler le caractère % il faut en mettre un deuxième. (Rappel : %20=espace %0A=\n )
REM sur la même ligne start mailto:dev@princeps.com?subject=Le%%20suje ^&cc=copie@princeps.com;copie2@princeps.com ^&bcc=copiecachée@princeps.com ^&body=Bonjour,%%0AMon%%20Message |
FTP
if exist ftp_config.txt del ftp_config.txt REM écriture du fichier contenant les commandes ftp (ftp_config.txt) echo login>ftp_config.txt echo password>>ftp_config.txt echo cd dossier1/dossier2>>ftp_config.txt REM par défaut le dossier local est le dossier courant echo lcd C:\dossier_local>>ftp_config.txt REM ascii pour les fichier texte, bin pour les fichiers binaire echo bin>>ftp_config.txt echo mput "%fichierAenvoyer%">>ftp_config.txt echo mget "%fichierArecuperer%">>ftp_config.txt echo quit>>ftp_config.txt REM L'option -i désactive les demandes de confirmation. ftp -i -s:ftp_config.txt ftp.iprinceps.net if exist ftp_config.txt del ftp_config.txt |
Tortoise SVN
Exemples
REM Lecture des arguments passés au script REM test si l'argument 1 est vide. REM pas de test avec "" car %1 en contient peut-être déjà. if [%1] == [] goto usage REM par défaut l'argument 2 vaut A. if "%2" == "" goto A if /i %2 == A goto A if /i %2 == B goto B goto usage REM si aucune correspondance n'a été trouvée. :usage echo Error in script usage. The correct usage is: echo %0 [file] [option] echo where [option] is: A ^| B echo. echo For example: echo %0 program.exe A echo. pause goto :eof |