User Tools

Site Tools


informatique:windows:batch

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:windows:batch [2019/10/04 10:15] yahikoinformatique:windows:batch [2023/09/14 08:46] (current) – Passage de codedoc à Prism yahiko
Line 1: Line 1:
 ====== Astuces diverses en Batch ====== ====== Astuces diverses en Batch ======
-Nous sommes en 2019 et j'utilise toujours le Batch pour automatiser des choses sous Windows. Pourquoi ? Parce que je suis une quiche en programmation, que je connais relativement pas trop mal les commandes DOS et que ça me permet d'aller vite. Alors oui, Powershell c'est plus mieux mais bon hein voila quoi. +Nous sommes en *Insérer l'année en cours* et j'utilise toujours le Batch pour automatiser des choses sous Windows. Pourquoi ? Parce que je suis une quiche en programmation, que je connais relativement pas trop mal les commandes DOS et que ça me permet d'aller vite. Alors oui, Powershell c'est plus mieux mais bon hein voila quoi. 
  
 Je vais donc compiler ici des petits bouts de codes qui peuvent servir dans pas mal de cas de figures ou tout simplement simplifier la vie. Malheureusement je n'ai plus la source pour la plus part que je n'ai pas trouvé par moi même, mais ce doit être de formidables personnes sur Stackoverflow ou sites dérivés (Super User, Server Fault... ). Je vais donc compiler ici des petits bouts de codes qui peuvent servir dans pas mal de cas de figures ou tout simplement simplifier la vie. Malheureusement je n'ai plus la source pour la plus part que je n'ai pas trouvé par moi même, mais ce doit être de formidables personnes sur Stackoverflow ou sites dérivés (Super User, Server Fault... ).
Line 6: Line 6:
 ===== Code en vrac ===== ===== Code en vrac =====
 ==== Passer en UTF-8 ==== ==== Passer en UTF-8 ====
-<codedoc code:batch>+<code batch>
 CHCP 65001 > NUL CHCP 65001 > NUL
-</codedoc>+</code>
  
 ==== Menu simple ==== ==== Menu simple ====
 Un menu simple à choix multiples en cas d'erreur pour une mauvaise saisie. Un menu simple à choix multiples en cas d'erreur pour une mauvaise saisie.
-<codedoc code:batch>+<code batch>
 SET /P CHOICE=Choix ?  SET /P CHOICE=Choix ? 
 IF /I "%CHOICE%"=="1" (GOTO CHOIX1) IF /I "%CHOICE%"=="1" (GOTO CHOIX1)
 IF /I "%CHOICE%"=="2" (GOTO CHOIX2) IF /I "%CHOICE%"=="2" (GOTO CHOIX2)
 IF /I "%CHOICE%" GTR "2" (GOTO ERREUR) IF /I "%CHOICE%" GTR "2" (GOTO ERREUR)
-</codedoc>+</code>
  
 ==== Trouver un fichier avec un nom partiel et mettre son nom complet dans une variable : ==== ==== Trouver un fichier avec un nom partiel et mettre son nom complet dans une variable : ====
-<codedoc code:batch>+<code batch>
 FOR /R %%f IN (NOMFICHIER*.machin) DO SET NOMVARIABLE="%%~nxf" FOR /R %%f IN (NOMFICHIER*.machin) DO SET NOMVARIABLE="%%~nxf"
-</codedoc>+</code>
  
 ==== Afficher la date du jour format AAAAMMJJ ==== ==== Afficher la date du jour format AAAAMMJJ ====
 +Une autre solution pour formater la date au format JJMMAAAA (ou JJ-MM-AAAA) est disponible plus bas : [[informatique:windows:batch#formater_la_date|Formater la date]]
 +
 Par exemple pour la mettre dans un nom de fichier. Par exemple pour la mettre dans un nom de fichier.
-<codedoc code:batch>+<code batch>
 %date:~-4,4%%date:~-7,2%%date:~-10,2% %date:~-4,4%%date:~-7,2%%date:~-10,2%
-</codedoc>+</code>
  
 Exemple :  Exemple : 
-<codedoc code:batch>+<code batch>
 Nomfichier_%date:~-4,4%%date:~-7,2%%date:~-10,2% Nomfichier_%date:~-4,4%%date:~-7,2%%date:~-10,2%
-</codedoc>+</code>
  
 ==== Vérifier qu'un fichier existe ==== ==== Vérifier qu'un fichier existe ====
 Deux possibilités de conditions :  Deux possibilités de conditions : 
-<codedoc code:batch>+<code batch>
 IF EXIST fichier.exe (ECHO Le fichier existe) IF EXIST fichier.exe (ECHO Le fichier existe)
-</codedoc>+</code>
 ou ou
-<codedoc code:batch>+<code batch>
 IF EXIST fichier.exe ( IF EXIST fichier.exe (
  ECHO Le fichier existe  ECHO Le fichier existe
Line 47: Line 49:
  ECHO Le fichier n'existe pas  ECHO Le fichier n'existe pas
 ) )
-</codedoc>+</code>
  
 ==== Paramétrer une imprimante par défaut ==== ==== Paramétrer une imprimante par défaut ====
-<codedoc code:batch>+<code batch>
 RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "Nom complet de l'imprimant dans Windows" RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "Nom complet de l'imprimant dans Windows"
-</codedoc>+</code>
 Par extension, un petit script pour attribuer un imprimante par défaut selon le nom du poste :  Par extension, un petit script pour attribuer un imprimante par défaut selon le nom du poste : 
-<codedoc code:batch>+<code batch>
 REM On récupère le nom du poste REM On récupère le nom du poste
 SET Nom_PC=%COMPUTERNAME% SET Nom_PC=%COMPUTERNAME%
Line 75: Line 77:
  GOTO EOF  GOTO EOF
 ) )
-</codedoc>+</code>
 C'est sale mais dans un réseau à la noix, sans domaine, avec juste un script de netlogon ça fonctionne. C'est sale mais dans un réseau à la noix, sans domaine, avec juste un script de netlogon ça fonctionne.
 ==== Changer le nom du PC ==== ==== Changer le nom du PC ====
-<codedoc code:batch>+<code batch>
 WMIC computersystem where caption='%computername%' rename Nouveau_Nom_du_PC WMIC computersystem where caption='%computername%' rename Nouveau_Nom_du_PC
-</codedoc>+</code>
  
 ==== Changer le nom d'un PC selon une nomenclature ==== ==== Changer le nom d'un PC selon une nomenclature ====
 Ici Il s'agit de rajouter 3 chiffres au nom du poste. Ex : MIC-xxx2019 Ici Il s'agit de rajouter 3 chiffres au nom du poste. Ex : MIC-xxx2019
-<codedoc code:batch>+<code batch>
 SET nom1=MIC- SET nom1=MIC-
 SET nom2=2019 SET nom2=2019
Line 116: Line 118:
  GOTO Comptes  GOTO Comptes
 ) )
-</codedoc>+</code>
  
 ==== Les commandes simples dont je ne rappelle jamais des arguments ==== ==== Les commandes simples dont je ne rappelle jamais des arguments ====
Line 122: Line 124:
  
 === Copie d'un dossier avec xcopy === === Copie d'un dossier avec xcopy ===
-<codedoc code:batch>+<code batch>
 XCOPY dossier_source dossier\destination /S /Y XCOPY dossier_source dossier\destination /S /Y
-</codedoc>+</code>
  
 === Copie d'un fichier avec xcopy === === Copie d'un fichier avec xcopy ===
-<codedoc code:batch>+<code batch>
 XCOPY fichier_source.machin fichier_destination.machin /Y XCOPY fichier_source.machin fichier_destination.machin /Y
-</codedoc>+</code>
  
 === Suppression d'un dossier non vide === === Suppression d'un dossier non vide ===
-<codedoc code:batch>+<code batch>
 RMDIR nom_du_dossier /S /Q RMDIR nom_du_dossier /S /Q
-</codedoc>+</code>
  
 ==== Faire un tableau ==== ==== Faire un tableau ====
 === Définir le tableau === === Définir le tableau ===
-<codedoc code:batch>+<code batch>
 SETLOCAL enabledelayedexpansion  SETLOCAL enabledelayedexpansion 
 SET var[0]=Valeur1 SET var[0]=Valeur1
Line 144: Line 146:
 SET var[2]=Valeur3 SET var[2]=Valeur3
 SET var[3]=Valeur4 SET var[3]=Valeur4
-</codedoc>+</code>
  
 === Boucle pour lire le tableau === === Boucle pour lire le tableau ===
-<codedoc code:batch>+<code batch>
 FOR /L %%n in (0,1,%boucle%) DO ( FOR /L %%n in (0,1,%boucle%) DO (
  ECHO Liste des valeurs : !var[%%n]!  ECHO Liste des valeurs : !var[%%n]!
 ) )
-</codedoc>+</code>
  
 === Exemple : === === Exemple : ===
-<codedoc code:batch>+<code batch>
 SETLOCAL enabledelayedexpansion  SETLOCAL enabledelayedexpansion 
 SET day[0]=MON SET day[0]=MON
Line 167: Line 169:
  ECHO !day[%%n]!  ECHO !day[%%n]!
 ) )
-</codedoc>+</code>
  
 ==== Supprimer des fichier plus vieux que x jours ==== ==== Supprimer des fichier plus vieux que x jours ====
Line 173: Line 175:
  
 Il suffit de modifier la valeur des variables des trois premières lignes pour définir le dossier, le nombre de jour et l'extension des fichiers à supprimer.  Il suffit de modifier la valeur des variables des trois premières lignes pour définir le dossier, le nombre de jour et l'extension des fichiers à supprimer. 
-<codedoc code:batch>+<code batch>
 SET folder=C:\DOSSIER\Bidule SET folder=C:\DOSSIER\Bidule
 SET days=15 SET days=15
Line 181: Line 183:
 ECHO Suppression des fichier %ext% du dossier %folder% de plus de %days% jours... ECHO Suppression des fichier %ext% du dossier %folder% de plus de %days% jours...
 PING localhost -n 5 > NUL PING localhost -n 5 > NUL
-</codedoc>+</code>
  
 Sinon, juste la ligne sans tout le blabla autour.  Sinon, juste la ligne sans tout le blabla autour. 
-<codedoc code:batch>+<code batch>
 FORFILES /P "C:\DOSSIER\Bidule" /S /M *.zip /D -15 /C "CMD /C del @path FORFILES /P "C:\DOSSIER\Bidule" /S /M *.zip /D -15 /C "CMD /C del @path
-</codedoc>+</code> 
 + 
 +==== Tuer un processus ==== 
 +<code batch> 
 +TASKKILL /F /IM processus.exe 
 +</code> 
 + 
 +Du coup, on peut faire un truc du genre :  
 + 
 +<code batch> 
 +TASKLIST /FI "IMAGENAME eq machin.exe" 2>NUL | find /I /N "machin.exe">NUL 
 +IF "%ERRORLEVEL%"=="0"
 + TASKKILL /F /IM machin.exe > NUL 
 +) ELSE ( 
 + ECHO Machin pas lancé n'est pas lancé. 
 +
 +</code> 
 + 
 +==== Formater la date ==== 
 +La variable d'environnement %date% renvoie, par défaut, la date au format JJ/MM/AAAA. Si on veut utiliser cette variable pour, par exemple, créer un dossier il faut la formater dans les slash. 
 +<code batch> 
 +%date:/=-% 
 +Retourne : JJ-MM-AAAA 
 + 
 +%date:/=_% 
 +Retourne : JJ_MM_AAAA 
 + 
 +Par exemple 
 +mkdir prout\%date:/=-% 
 +Retourne un dossier prout\JJ-MM-AAAA 
 +</code> 
 + 
 +Au format ISO 8601 :  
 +<code batch> 
 +%date:~6,4%-%date:~3,2%-%date:~0,2% 
 +</code> 
 + 
 +==== Récupérer le jour de la semaine ==== 
 +Source : [[https://itectec.com/superuser/adding-day-of-week-to-file-name-in-batch-file/]] 
 +<code batch> 
 +@ECHO OFF 
 +for /F "tokens=2 skip=2 delims=," %%D in ('WMIC Path Win32_LocalTime Get DayOfWeek /Format:csv') do @set day=%%D 
 +IF %day%==1 SET jour=lundi 
 +IF %day%==2 SET jour=mardi 
 +IF %day%==3 SET jour=mercredi 
 +IF %day%==4 SET jour=jeudi 
 +IF %day%==5 SET jour=vendredi 
 +IF %day%==6 SET jour=samedi 
 +IF %day%==7 SET jour=dimanche 
 +ECHO Jour : %jour% 
 +PAUSE 
 +</code> 
 + 
 +http://brisray.com/computers/batch-volume.htm 
 + 
 +==== Récupérer une IP depuis un ping ==== 
 +Source : [[https://stackoverflow.com/questions/9171774/batch-file-getting-ip-from-ping-command]] 
 +<code batch> 
 +FOR /f "tokens=1,3 delims=: " %%A IN ('ping -n 1 fr.wikipedia.org') DO IF %%A==Réponse SET IP=%%B 
 +ECHO %IP% 
 +</code>
informatique/windows/batch.1570184127.txt.gz · Last modified: 2020/02/28 09:42 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki