Site Tools


informatique:windows:batch

This is an old revision of the document!


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.

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 certains 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… ).

Code en vrac

Afficher les caractères accentués

CHCP 65001 > NUL
</code>
 
==== Menu simple ====
Un menu simple à choix multiples en cas d'erreur pour une mauvaise saisie.
SET /P CHOICE=Choix ? 
IF /I%CHOICE%”==“1(GOTO CHOIX1)
IF /I%CHOICE%”==“2(GOTO CHOIX2)
IF /I%CHOICE%” GTR “2(GOTO ERREUR)

  ==== Trouver un fichier avec un nom partiel et mettre son nom complet dans une variable : ====

FOR /R %%f IN (NOMFICHIER*.machin) DO SET NOMVARIABLE=“%%~nxf” 

  ==== Afficher la date du jour format AAAAMMJJ ==== Par exemple pour la mettre dans un nom de fichier.

%date:~-4,4%%date:~-7,2%%date:~-10,2%

  Exemple :

Nomfichier_%date:~-4,4%%date:~-7,2%%date:~-10,2%

  ==== Vérifier qu'un fichier existe ==== Deux possibilités de conditions :

IF EXIST fichier.exe (ECHO Le fichier existe)

ou

IF EXIST fichier.exe (
	ECHO Le fichier existe
) ELSE (
	ECHO Le fichier n'existe pas
)

  ==== Paramétrer une imprimante par défaut ====

RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n%ImpCDI_Col%” 

Par extension, un petit script pour attribuer un imprimante par défaut selon le nom du poste :

REM On récupère le nom du poste
SET Nom_PC=%COMPUTERNAME%
REM On définit le nom des imprimantes
SET ImpSalle1=“Ricoh Machin PCL6”SET ImpSalle2=“Xerox Truc Bidule PS” 
IF /I%NOM_PC:~0,3%==“MIC” SET Printer=Salle1
IF /I%NOM_PC:~0,4%==“PORT” SET Printer=Salle2
 
IF /I%Printer%”==“CDI” SET
	RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n %Salle1%
) ELSE (
	GOTO SALLE2
)

:SALLE2
	RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n %Salle2%
) ELSE (
	GOTO EOF)

C'est salle mais dans un réseau à la noix, sans domaine, ça ==== Changer le nom du PC ====

WMIC computersystem where caption='%computername%' rename Nouveau_Nom_du_PC

  ==== Changer le nom d'un PC selon une nomenclature ==== Ici Il s'agit de rajouter 3 chiffres au nom du poste. Ex : MIC-xxx2019

SET nom1=MIC-
SET nom2=2019
:Saisie
SET /p nb=“Saisie le numero du poste : ”FOR /F “tokens=1* delims=0123456789” %%a IN (“A0%nb:”=%“) DO (
    IF NOT%%b“==”“ (
        ECHO Uniquement des chiffres !
        GOTO Saisie
    )
)
IF!nb:~3!“==”“ IF NOT!nb:~2!“==”“ (
    REM Conditions ok donc on continue
    GOTO Check
) ELESE (
    ECHO 3 caractères mini et max !
    GOTO Saisie
)
:Check
SET nom_ok=%nom1%%nb%%nom2%
REM On pinge pour voir si le poste existe déjà sur le réseau
ECHO Le numero nom du poste est %nom_ok%
PING -n 1 %nom_ok% | findstr /r /c:[0-9] *ms“ > NUL
IF %errorlevel% == 0 (
	ECHO Le poste %nom_ok% existe deja. Vérifier !
	ECHO.
	GOTO Saisie
) ELSE (
	ECHO Nommage du poste en %nom_ok%
	WMIC computersystem where caption='%computername%' rename %nom_ok% > NUL
	GOTO Comptes
)

  ==== Les commandes simples dont je ne rappelle jamais des arguments ==== Parce que je ne m'en rappelle jamais, j'sais pas pourquoi.   === Copie d'un dossier avec xcopy ===

XCOPY dossier_source dossier\destination /S /Y

  === Copie d'un fichier avec xcopy ===

XCOPY fichier_source.machin fichier_destination.machin /Y

  === Suppression d'un dossier non vide ===

RMDIR nom_du_dossier /S /Q

 

informatique/windows/batch.1552318210.txt.gz · Last modified: 2020/02/28 09:42 (external edit)