This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatique:windows:batch [2021/06/25 14:45] – yahiko | informatique:windows:batch [2025/01/13 11:02] (current) – yahiko | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Astuces diverses en Batch ====== | ====== Astuces diverses en Batch ====== | ||
- | Nous sommes en 2019 et j' | + | Nous sommes en *Insérer l' |
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... ). | ||
+ | |||
+ | Faudrait que je bascule tout ça sur un git. Un jour. | ||
===== Code en vrac ===== | ===== Code en vrac ===== | ||
==== Passer en UTF-8 ==== | ==== Passer en UTF-8 ==== | ||
- | <codedoc | + | <code batch> |
CHCP 65001 > NUL | CHCP 65001 > NUL | ||
- | </codedoc> | + | </code> |
==== Menu simple ==== | ==== Menu simple ==== | ||
Un menu simple à choix multiples en cas d' | Un menu simple à choix multiples en cas d' | ||
- | <codedoc | + | <code batch> |
SET /P CHOICE=Choix ? | SET /P CHOICE=Choix ? | ||
IF /I " | IF /I " | ||
IF /I " | IF /I " | ||
IF /I " | IF /I " | ||
- | </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> |
FOR /R %%f IN (NOMFICHIER*.machin) DO SET NOMVARIABLE=" | FOR /R %%f IN (NOMFICHIER*.machin) DO SET NOMVARIABLE=" | ||
- | </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: | ||
+ | |||
Par exemple pour la mettre dans un nom de fichier. | Par exemple pour la mettre dans un nom de fichier. | ||
- | <codedoc | + | <code batch> |
%date: | %date: | ||
- | </codedoc> | + | </code> |
Exemple : | Exemple : | ||
- | <codedoc | + | <code batch> |
Nomfichier_%date: | Nomfichier_%date: | ||
- | </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> |
IF EXIST fichier.exe (ECHO Le fichier existe) | IF EXIST fichier.exe (ECHO Le fichier existe) | ||
- | </codedoc> | + | </code> |
ou | ou | ||
- | <codedoc | + | <code batch> |
IF EXIST fichier.exe ( | IF EXIST fichier.exe ( | ||
ECHO Le fichier existe | ECHO Le fichier existe | ||
Line 47: | Line 51: | ||
ECHO Le fichier n' | ECHO Le fichier n' | ||
) | ) | ||
- | </codedoc> | + | </code> |
==== Paramétrer une imprimante par défaut ==== | ==== Paramétrer une imprimante par défaut ==== | ||
- | <codedoc | + | <code batch> |
RUNDLL32 PRINTUI.DLL, | RUNDLL32 PRINTUI.DLL, | ||
- | </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> |
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 79: | ||
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> |
WMIC computersystem where caption=' | WMIC computersystem where caption=' | ||
- | </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> |
SET nom1=MIC- | SET nom1=MIC- | ||
SET nom2=2019 | SET nom2=2019 | ||
Line 116: | Line 120: | ||
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 126: | ||
=== Copie d'un dossier avec xcopy === | === Copie d'un dossier avec xcopy === | ||
- | <codedoc | + | <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> |
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> |
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> |
SETLOCAL enabledelayedexpansion | SETLOCAL enabledelayedexpansion | ||
SET var[0]=Valeur1 | SET var[0]=Valeur1 | ||
Line 144: | Line 148: | ||
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> |
FOR /L %%n in (0, | FOR /L %%n in (0, | ||
ECHO Liste des valeurs : !var[%%n]! | ECHO Liste des valeurs : !var[%%n]! | ||
) | ) | ||
- | </codedoc> | + | </code> |
=== Exemple : === | === Exemple : === | ||
- | <codedoc | + | <code batch> |
SETLOCAL enabledelayedexpansion | SETLOCAL enabledelayedexpansion | ||
SET day[0]=MON | SET day[0]=MON | ||
Line 167: | Line 171: | ||
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 177: | ||
Il suffit de modifier la valeur des variables des trois premières lignes pour définir le dossier, le nombre de jour et l' | Il suffit de modifier la valeur des variables des trois premières lignes pour définir le dossier, le nombre de jour et l' | ||
- | <codedoc | + | <code batch> |
SET folder=C: | SET folder=C: | ||
SET days=15 | SET days=15 | ||
Line 181: | Line 185: | ||
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> |
FORFILES /P " | FORFILES /P " | ||
- | </codedoc> | + | </code> |
==== Tuer un processus ==== | ==== Tuer un processus ==== | ||
- | <codedoc | + | <code batch> |
TASKKILL /F /IM processus.exe | TASKKILL /F /IM processus.exe | ||
- | </codedoc> | + | </code> |
Du coup, on peut faire un truc du genre : | Du coup, on peut faire un truc du genre : | ||
- | <codedoc | + | <code batch> |
TASKLIST /FI " | TASKLIST /FI " | ||
IF " | IF " | ||
Line 202: | Line 206: | ||
ECHO Machin pas lancé n'est pas lancé. | ECHO Machin pas lancé n'est pas lancé. | ||
) | ) | ||
- | </codedoc> | + | </code> |
==== Formater la date ==== | ==== Formater la date ==== | ||
La variable d' | La variable d' | ||
- | <codedoc | + | <code batch> |
%date:/=-% | %date:/=-% | ||
Retourne : JJ-MM-AAAA | Retourne : JJ-MM-AAAA | ||
Line 216: | Line 220: | ||
mkdir prout\%date:/ | mkdir prout\%date:/ | ||
Retourne un dossier prout\JJ-MM-AAAA | Retourne un dossier prout\JJ-MM-AAAA | ||
- | </codedoc> | + | </code> |
+ | |||
+ | Au format ISO 8601 : | ||
+ | <code batch> | ||
+ | %date: | ||
+ | </ | ||
+ | |||
+ | ==== Récupérer le jour de la semaine ==== | ||
+ | Source : [[https:// | ||
+ | <code batch> | ||
+ | @ECHO OFF | ||
+ | for /F " | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | http:// | ||
+ | |||
+ | ==== Récupérer une IP depuis un ping ==== | ||
+ | Source : [[https:// | ||
+ | <code batch> | ||
+ | FOR /f " | ||
+ | ECHO %IP% | ||
+ | </ | ||
+ | |||
+ | ==== Créer des dossiers d' | ||
+ | Le fichier texte contenant, par exemple, des noms d' | ||
+ | |||
+ | <file txt usernames.txt> | ||
+ | rodrigue | ||
+ | chimène | ||
+ | elvire | ||
+ | diègue | ||
+ | </ | ||
+ | |||
+ | Le script : | ||
+ | <code batch> | ||
+ | SET list=usernames.txt | ||
+ | SET folder=D: | ||
+ | FOR /F %%n IN (%list%) DO MKDIR %folder%\%%n | ||
+ | </ | ||
+ | |||
+ | Un peu plus sophistiqué, | ||
+ | <code batch> | ||
+ | SET list=usernames.txt | ||
+ | SET folder=D: | ||
+ | IF EXIST %folder% ( | ||
+ | GOTO CREATE | ||
+ | ) ELSE ( | ||
+ | MKDIR %folder% | ||
+ | GOTO CREATE | ||
+ | ) | ||
+ | |||
+ | :CREATE | ||
+ | FOR /F %%n IN (%list%) DO MKDIR %folder%\%%n | ||
+ | </ | ||
+ | |||
+ | ==== Compresser ==== | ||
+ | Depuis 2019 Windows inclue libarchive (et curl). On peut compresser directement en ligne de commande sans installer de logiciels supplémentaires. | ||
+ | |||
+ | <code batch> | ||
+ | tar -a -c -f archive.zip fichier_ou_dossier_a_compresser | ||
+ | </ | ||
+ | |||
+ | ==== Création d'une arborescence de dossiers depuis un CSV ==== | ||
+ | |||
+ | <file batch arbo.bat> | ||
+ | REM @ECHO OFF | ||
+ | CHCP 65001 > NUL | ||
+ | |||
+ | SET Folder=D: | ||
+ | SET CSV=dossiers.csv | ||
+ | |||
+ | FOR /F " | ||
+ | </ | ||
+ | |||
+ | Structure du CSV : | ||
+ | |||
+ | <file csv dossiers.csv> | ||
+ | Dossier1, | ||
+ | Dossier1, | ||
+ | Dossier2, | ||
+ | Dossier3, | ||
+ | Dossier4, | ||
+ | </ | ||
+ | |||
+ | Sources : | ||
+ | * https:// | ||
+ | * https:// |