Liens
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%
|
Création / Suppression de dossiers / fichiers
Lecture des arguments passés au script
|
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
|
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
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
http://www.robvanderwoude.com/if.php
|
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%
)
|
|
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
|
|
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
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
|
Attention 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
|
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
|
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 )
|
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
Ligne de commande
Exemples
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
|