« Batch » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
(20 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 30 : Ligne 31 :
{{info | Les fichiers BATCH ont l'extension <tt>*.bat</tt>}}
{{info | Les fichiers BATCH ont l'extension <tt>*.bat</tt>}}


=Variable d’environnement=
= Variables d'environnement =
{|
<kode lang="dos">
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
REM chemin courant
REM chemin courant
%CD%
%CD%
Ligne 54 : Ligne 52 :
REM C:\Users\Nicolas\AppData\Local\Temp
REM C:\Users\Nicolas\AppData\Local\Temp
%tmp% ou %temp%
%tmp% ou %temp%
</syntaxhighlight>
</kode>
|}
 
= File / Folder / Path =
<kode lang="dos">
REM lister les short path
dir /x


=Création / Suppression de dossiers / fichiers=
{|
|+ Lecture des arguments passés au script
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
REM Créer un dossier
REM Créer un dossier
md MonDossier
md MonDossier
Ligne 75 : Ligne 71 :
REM Supprimer plusieurs fichiers
REM Supprimer plusieurs fichiers
del MonFichier1 MonFichier2 *.txt
del MonFichier1 MonFichier2 *.txt
</syntaxhighlight>
</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>
 
= Lancer un sous-script batch =
<kode lang="dos">
call deuxiemeScript.bat
</kode>


=Les caractères accentués=
=Les caractères accentués=
Ligne 85 : Ligne 97 :
Utilisez l'encode ANSI pour écrire vos scripts batch.
Utilisez l'encode ANSI pour écrire vos scripts batch.


=Arguments passés au script=
= Arguments passés au script =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
echo %0  REM nom du fichier de script avec son chemin tel qu'il a été appelé : avec ou sans l'extension
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
Ligne 105 : Ligne 114 :
echo %~n0        REM Fichier
echo %~n0        REM Fichier
REM fonctionne avec %0..n mais pas avec les variables (SET MaVariable=...)
REM fonctionne avec %0..n mais pas avec les variables (SET MaVariable=...)
</syntaxhighlight>
</kode>
|}


=For=
= For =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
for %variable in (ensemble) do (
for %variable in (ensemble) do (
     commande1
     commande1
Ligne 118 : Ligne 123 :
)
)
REM utilisez %%variable au lieu de %variable pour l'utiliser dans commande
REM utilisez %%variable au lieu de %variable pour l'utiliser dans commande
</syntaxhighlight>
</kode>
|}


==Résultat d'une commande==
== Résultat d'une commande ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
REM stocke la dernière ligne retournée par commande dans variable
REM stocke la dernière ligne retournée par commande dans variable
for /f "delims=" %%i in ('commande') do set variable=%%i
for /f "delims=" %%i in ('commande') do set variable=%%i
</syntaxhighlight>
</kode>
|}


==Générer une suite de chiffres==
== Générer une suite de chiffres ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
for /L %variable in (début, pas, fin)
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 (1, 1, 5)    REM 1 2 3 4 5
for /L %i in (5, -1, 1)    REM 5 4 3 2 1
for /L %i in (5, -1, 1)    REM 5 4 3 2 1
</syntaxhighlight>
</kode>
|}


==Splitter==
== Splitter ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
for /f ["options"] %variable in (ensemble)
for /f ["options"] %variable in (ensemble)
REM ensemble: nom de fichier, "chaîne de charactères", 'commande'
REM ensemble: nom de fichier, "chaîne de charactères", 'commande'
Ligne 161 : Ligne 154 :
REM affichage des éléments un par un
REM affichage des éléments un par un
for /D %%i in ("élément1", "élément2") do echo %%i
for /D %%i in ("élément1", "élément2") do echo %%i
</syntaxhighlight>
</kode>
|}


==Nombre de lignes d'un fichier==
== Nombre de lignes d'un fichier ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
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
REM selection du 3eme elements de la sortie
REM selection du 3eme elements de la sortie
REM ---------- fichier.txt: 18
REM ---------- fichier.txt: 18
</syntaxhighlight>
</kode>
|}


==Substitution==
== Substitution ==
Après le do, %%i peut être substitué :
Après le {{boxx|do}}, {{boxx|%%i}} peut être substitué :
{| cellpadding="10" cellspacing="0" border="1"
{| class="wikitable wtp wtmono1"  
|<syntaxhighlight lang="dos">%%~i</syntaxhighlight>||supprimes les guillemets (") au début et à la fin
| %%~i || supprimes les guillemets (") au début et à la fin
|-
|-
|<syntaxhighlight lang="dos">%%~fi</syntaxhighlight>||fully qualified path name
| %%~fi || fully qualified path name
|-
|-
|<syntaxhighlight lang="dos">%%~di</syntaxhighlight>||drive letter only
| %%~di || drive letter only
|-
|-
|<syntaxhighlight lang="dos">%%~pi</syntaxhighlight>||path only
| %%~pi || path only
|-
|-
|<syntaxhighlight lang="dos">%%~ni</syntaxhighlight>||file name only
| %%~ni || file name only
|-
|-
|<syntaxhighlight lang="dos">%%~xi</syntaxhighlight>||file extension only
| %%~xi || file extension only
|-
|-
|<syntaxhighlight lang="dos">%%~$PATH:i</syntaxhighlight>
| %%~$PATH:i  
|searches the directories listed in the PATH environment variable and expands %i to the fully qualified name of the first one found.<br/>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.
| searches the directories listed in the PATH environment variable and expands %i to the fully qualified name of the first one found.<br/>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=
= Tail =
{|
<kode lang='dos'>
|+ Equivalent du tail de bash
REM Equivalent du tail de bash
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
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 206 : 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
</syntaxhighlight>
</kode>
|}


=Goto et label=
= Goto et label =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
:label
:label
commande
commande
Ligne 220 : 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
</syntaxhighlight>
</kode>
|}


=If=
= [http://www.robvanderwoude.com/if.php If] =
http://www.robvanderwoude.com/if.php
<kode lang='dos'>
{|
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
if  [not]  test  commande  else  commande
if  [not]  test  commande  else  commande


Ligne 238 : Ligne 214 :
   commande2
   commande2
)
)
</syntaxhighlight>
</kode>
|}


==Tests booléen==
== Tests booléen ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight 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 261 : Ligne 233 :
REM test sans la casse
REM test sans la casse
if /i z==Z
if /i z==Z
</syntaxhighlight>
</kode>
|}


==Test l'existence d'un fichier==
== Test l'existence d'un fichier ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
if exist "C:\dossier\fichier.txt" commande
if exist "C:\dossier\fichier.txt" commande
</syntaxhighlight>
</kode>
|}


=FINDSTR=
= FINDSTR =
==GREP like==
== GREP like ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
commande | findstr /C:"phrase à chercher"
commande | findstr /C:"phrase à chercher"
</syntaxhighlight>
</kode>
|}


==Expressions rationnelles==
== Expressions rationnelles ==
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight 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 293 : 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
</syntaxhighlight>
</kode>
|}


= Lire les entrées du clavier =
= Lire les entrées du clavier =
Ligne 312 : Ligne 271 :
)
)
</kode>
</kode>
=Lancer un sous-script batch=
{|
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
call deuxiemeScript.bat
</syntaxhighlight>
|}


= [http://www.dostips.com/DtTipsStringManipulation.php#Snippets.RightString Manipulation de string] =
= [http://www.dostips.com/DtTipsStringManipulation.php#Snippets.RightString Manipulation de string] =
Ligne 347 : 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'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
REM msg * : envoie un message à toute les sessions
REM msg * : envoie un message à toute les sessions
msg * Message
msg * Message
Ligne 359 : 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"
</syntaxhighlight>
</kode>
|}


=Menu=
= Menu =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
:menu
:menu
cls
cls
Ligne 378 : Ligne 321 :
if errorlevel 1 goto 1
if errorlevel 1 goto 1
goto menu
goto menu
</syntaxhighlight>
</kode>
|}


Attention CHOICE ne fonctionne pas sous XP.
{{warn | {{boxx|CHOICE}} ne fonctionne pas sous XP.}}
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
:menu
:menu
cls
cls
Ligne 398 : Ligne 337 :
if "%choice%"=="2" goto 2
if "%choice%"=="2" goto 2
goto menu
goto menu
</syntaxhighlight>
</kode>
|}


=Définir des Alias comme dans bash=
= Définir des Alias comme dans bash =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
@echo off
@echo off


Ligne 411 : 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
</syntaxhighlight>
</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 437 : Ligne 371 :
</kode>
</kode>


=Utilisateurs et groupes=
= Utilisateurs et groupes =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
REM créer un nouvel utilisateur
REM créer un nouvel utilisateur
net user MonUtilisateur /add
net user MonUtilisateur /add
Ligne 452 : Ligne 383 :
REM affecter l'utilisateur à un groupe
REM affecter l'utilisateur à un groupe
net localgroup MonGroupe MonUtilisateur /add
net localgroup MonGroupe MonUtilisateur /add
</syntaxhighlight>
</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 )
{|
 
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
<kode lang='dos'>
|
<syntaxhighlight 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 468 : Ligne 396 :
^&bcc=copiecachée@princeps.com
^&bcc=copiecachée@princeps.com
^&body=Bonjour,%%0AMon%%20Message
^&body=Bonjour,%%0AMon%%20Message
</syntaxhighlight>
</kode>
|}


=FTP=
= FTP =
{|
<kode lang='dos'>
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
if exist ftp_config.txt del ftp_config.txt
if exist ftp_config.txt del ftp_config.txt


Ligne 494 : Ligne 418 :


if exist ftp_config.txt del ftp_config.txt
if exist ftp_config.txt del ftp_config.txt
</syntaxhighlight>
</kode>
|}


=Tortoise SVN=
=Tortoise SVN=
[[TortoiseSVN#Ligne de commande|Ligne de commande]]
[[TortoiseSVN#Ligne de commande|Ligne de commande]]


=Exemples=
= Exemples =
{|
<kode lang='dos'>
|+ Lecture des arguments passés au script
REM Lecture des arguments passés au script
!style="padding: 0 10px 0 0"| [[File:dos.png|40px]]
|
<syntaxhighlight lang="dos">
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 527 : Ligne 447 :
pause
pause
goto :eof
goto :eof
</syntaxhighlight>
</kode>
|}
 
[[Category:Windows]]

Dernière version du 20 juillet 2020 à 17:15

Liens

Astuces

Dos.svg
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

Dos.svg
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

Dos.svg
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
Dos.svg
ShortNamePath.cmd 'C:\Program Files (x86)\'
REM C:\PROGRA~2\

Lancer un sous-script batch

Dos.svg
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

Dos.svg
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

Dos.svg
for %variable in (ensemble) do (
    commande1
    commande2
)
REM utilisez %%variable au lieu de %variable pour l'utiliser dans commande

Résultat d'une commande

Dos.svg
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

Dos.svg
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

Dos.svg
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

Dos.svg
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

Dos.svg
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

Dos.svg
:label
commande
goto label

REM permet de se rendre directement à la fin du script
goto :eof

If

Dos.svg
if  [not]  test  commande  else  commande

if [not] test (
  commande1
  commande2
) else (
  commande1
  commande2
)

Tests booléen

Dos.svg
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

Dos.svg
if exist "C:\dossier\fichier.txt" commande

FINDSTR

GREP like

Dos.svg
commande | findstr /C:"phrase à chercher"

Expressions rationnelles

Dos.svg
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

Dos.svg
echo question ?
set /p variable=

Code de retour

Dos.svg
echo %errorlevel%

commande.exe
if errorlevel 1 (
   echo Failure Reason Given is %errorlevel%
   exit /b %errorlevel%
)

Manipulation de string

Dos.svg
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

Dos.svg
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.

Dos.svg
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

Dos.svg
: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.
Dos.svg
: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

Dos.svg
@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

Dos.svg
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

Dos.svg
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

Mail

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 )

Dos.svg
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

Dos.svg
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

Ligne de commande

Exemples

Dos.svg
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