Vous êtes sur la page 1sur 19

Avant-Propos

Batcher création de scripts MS-DOS, apprendre les bases de la création de scripts batch, comment à l'aide
d'un simple éditeur de texte il est possible d'aller assez loin. Un fichier batch est, sous le système
d'exploitation Windows, un fichier (ou script) contenant une série d'instructions MS-DOS.
Ces commandes sont interprétées par les exécutables cmd.exe et command.com. Les scripts pourront
s'exécuter sur les tous les environnements Windows.
Apprendre à "batcher" en plusieurs étapes, tout d'abord connaître les différentes commandes. Puis créer un
batch, ensuite le sophistiquer en intégrant des variables, des fonctions et enfin personnaliser l'affichage.

Principales Commandes
Dans cette partie nous allons voir les différentes commandes utilisable sous MS-DOS, ainsi que leurs
fonctionnalités, ces dernières constitueront une ligne de nos futurs batch. Ces Commandes peuvent être
exécutées dans une invite
Commandes de bases
Commande Fonction
CD Permet de se déplacer d'un répertoire à un autre. (Exemple: c> cd dossier )
CD \ Permet d'accéder à la racine d'un lecteur. (Exemple: c> cd \ )
DIR Liste le contenu du répertoire courant. (Exemple: c> dir )
MKDIR Création d'un dossier. (Exemple: c>mkdir dossier )
RMDIR Effacer un dossier. (Exemple: c>rmdir dossier)
COPY Copie des fichiers. (Exemple: c> copy toto.txt c:\toto.txt )
XCOPY Copie des fichiers et des répertoires. (Exemple: c> xcopy toto.txt c:\toto.txt )
DEL Effacer un fichier (Exemple: c>del c:\temp.txt )
REN Renommer des fichier (Exemple: ren toto.txt tata.txt)
MOVE Déplace un fichier. (Exemple: c> move c:\temp.txt d:\)
EDIT Lance un éditeur de texte sous MS-DOS.(Exemple: c> edit toto.txt )
MORE Visualiser le contenu d'un fichier texte (Exemple: c> more toto.txt )
FORMAT Permet d'effacer le contenu d'un lecteur. (Exemple: c> format a: )
CLS Efface l'écran actuel. (Exemple: c> cls )
FIND Recherche dans un fichier la ligne contenant une valeur. (Exemple:
CMD Ouvre la fenêtre de commande DOS. (Exemple: c> cmd )
ECHO Affiche un message. (Exemple: c> echo salut )
ECHO. Permet de sauter une ligne. (Exemple: c>echo. )
SORT Permet de trier une liste en fonction d'un critère. (Exemple: c> dir | sort reverse )
PRINT Imprime le fichier spécifié. (Exemple: c>print toto.txt )
EXIT Ferme la fenêtre MSDOS. (Exemple: c> exit)
TYPE Affiche un fichier texte. (Exemple: c> type list.txt ) même fonction que more
FC Comparaison de fichiers.
ATTRIB Modifie les attributs d'un fichier. (Exemple: c> attrib c:\test +a )
CACLS Modifie les droits utilisateurs sur un fichier.
CHDIR Affiche l'arboréscence actuelle. (Exemple: c:\temp> chdir)
Commandes réseaux
Commande Fonction
Effectue un test de connectivité sur une machine distante à utiliser avec une adresse IP. (exemple:
PING
c> ping google.fr)

1
Permet de voir votre configuration réseau, adresse IP, DNS, serveur DHCP... (exemple: c>
IPCONFIG
ipconfig ,ipconfig /all)
NETSTAT Affiche leurs connexions active sur votre machine, port et protocole. (exemple: c> NETSTAT)
NET USE Connecte un lecteur réseau. (exemple: c>net use z: \\nompc\nompartage)
TRACERT Affiche les adresses des passerelles pour accéder à une destination ( c> tracert google.fr )
Permet de voir et de modifier la table ARP, correspondance MAC <-> IP des machines
ARP
connectées sur le réseau.
TELNET Telnet sur une autre machine (exemple: c> telnet 192.168.0.1)
NET SEND Envoi un message sur une machine sur le réseau.(emple: c> net send %computername% coucou)
NSLOOKUP Permet de faire une résolution DNS, (exemple donne les IP de google: c> nslookup google.fr )
FTP Lance un module FTP permettant de faire des transfert de fichiers. (exemple: c> ftp 01net.com )
Exécute des commandes sur des hôtes distants exécutant le service REXEC. Rexec authentifie
REXEC
l'utilisateur sur l'hôte distant avant d'exécuter la commande spécifiée.
TFTP transfère les fichiers depuis et vers un ordinateur distant exécutant le service TFTP.
RUNAS Permet d'éxécuter une commande avec un compte utilisateur différent.
NET TIME Permet de pouvoir synchroniser l'horloge avec un serveur.
MODE Permet d'afficher des informations concerant les ports COM
NETSH Permet de configurer des interfaces réseaux.
ROUTE Permet de gérer la table de routage de la machine locale (exemple: c> route print )
NBTSTAT Affiche les statistiques du protocole TCP/IP actuelles
Commandes utilitaires Windows
Commande Fonction
DEFRAG Permet de défragmenter un lecteur (exemple: c> defrag c:)
CHKDSK Permet de lancer un scandisk sur un disque dur
NET START Démarre un service windows (exemple: c> net start sharedaccess)
CLEANMGR Permet de faire un netoyage des disques durs.
CONVERT Convertit des volumes FAT en volumes NTFS
SHUTDOWN Arrête ou redémarre un ordinateur local ou distant.
BOOTCFG Configure, interroge ou modifie les paramètres du fichier boot.ini.
DISKPART Gère des disques, des partitions ou des volumes.
SYSTEMINFO Permet d'obtenire une foule d'information sur votre équipement.
Affiche les données du compteur de performances dans la fenêtre de commande ou dans un
TYPEPERF
format de fichier journal pris en charge.
DRIVERQUERY Recherche une liste de pilotes et de propriétés de pilotes.
Affiche des informations concernant les zones de mémoire allouées, les zones de mémoire
MEM
libre et les programmes actuellement chargés en mémoire dans le sous-système MS-DOS.
LABEL Les symboles ^ et & peuvent être utilisés dans les noms de volume.
AT planifie l'exécution de commandes
Commandes Diverse
Commande Fonction
CALL Appelle un fichier batch à partir d'un autre fichier batch.(exemple: c> ping google.fr)
Permet de modifier les couleurs de la fenêtre MS-DOS (exemple:color 0a affiche le texte en
COLOR
vert et le fond en noir)
HOSTNAME Affiche le nom de l'ordinatateur (exemple: c> hostname)
REG Permet de faire des interventions dans la base de registre.
2
TITLE Permet de renommer la fenêtre MS-DOS (exemple: c> title batcher!)
TREE Représente graphiquement une arborescence de répertoires (exemple: c>tree)
BREAK Active ou désactive le contrôle étendu de CTRL+C.
PROMPT Modifie l'invite de commande(exemple: c> prompt batcher! )
> Redirection remplacement (exemple: echo batcher! > temp.txt)
>> Redirection ajout (exemple: c> echo batcher! >> temp.txt)
COMPACT Compresse et décompresse un fichier (exemple: c> compact temp.txt /C )
Commandes dédiées aux scripts
Commande Fonction
Permet de stopper le traitement en cours en demandant à l'utilisateur de taper une
PAUSE
touche pour continuer.
IF Instore une structure conditionnelle
FOR permet de créer des boucles
SET défintion d'une variable %variable% pour la rapelée
GOTO Permet d'aller à une étiquette définit dans le script via ":".
SET VARNAME= Crée une variable.
SETLOCAL Crée une variable locale.
Permet de créer une temporisation avec un réglage en secondes. (!!! Valable
TIMEOUT
uniquement sous Vista !!!)
Liste des commandes dos
ASSOC Affiche ou modifie les applications associées aux extensions de fichiers.
ATTRIB Affiche ou modifie les attributs d'un fichier.
BREAK Active ou désactive le contrôle étendu de CTRL+C.
Définit les propriétés dans la base de données de démarrage pour le contrôle du chargement
BCDEDIT
d'amorçage.
CACLS Affiche ou modifie les listes de contrôles d'accès aux fichiers.
CALL Appelle un fichier de commandes à partir d'un autre fichier de commandes.
CD Modifie le répertoire ou affiche le répertoire actif.
CHCP Modifie ou affiche le numéro de la page de code active.
CHDIR Modifie le répertoire ou affiche le nom du répertoire actif.
CHKDSK Vérifie un disque et affiche un rapport d'état.
CHKNTFS Affiche ou modifie la vérification du disque au démarrage.
CLS Efface l'écran.
CMD Exécute une nouvelle instance de l'interpréteur de commandes de Windows.
COLOR Modifie les couleurs du premier plan et de l'arrière-plan de la console.
COMP Compare les contenus de deux fichiers ou groupes de fichiers.
COMPACT Modifie ou affiche la compression des fichiers sur une partition NTFS.
Convertit des volumes FAT en volumes NTFS. Vous ne pouvez pas convertir le lecteur en
CONVERT
cours d'utilisation.
COPY Copie un ou plusieurs fichiers.
DATE Affiche ou définit la date.
DEL Supprime un ou plusieurs fichiers.
DIR Affiche la liste des fichiers et des sous-répertoires d'un répertoire.
DISKCOMP Compare les contenus de deux disquettes.
DISKCOPY Copie le contenu d'une disquette sur une autre.
DISKPART Affiche ou configure les propriétés d'une partition de disque.
DOSKEY Modifie les lignes de commande, rappelle des commandes Windows, et crée des macros.

3
DRIVERQUERY Affiche l'état et les propriétés du pilote de périphérique en cours d'utilisation.
ECHO Affiche des messages ou active/désactive l'affichage des commandes.
ENDLOCAL Stoppe la localisation des modifications d'environnement dans un fichier de commandes.
ERASE Supprime un ou plusieurs fichiers.
EXIT Quitte l'interpréteur de commandes (CMD.EXE).
FC Compare deux fichiers ou groupes de fichiers et affiche les différences.
FIND Recherche une chaîne de caractères dans un ou plusieurs fichiers.
FINDSTR Cherche des chaînes dans les fichiers.
FOR Exécute une commande sur chaque fichier d'un ensemble de fichiers.
FORMAT Formate un disque devant être utilisé avec Windows.
FSUTIL Affiche ou configure les propriétés du système de fichiers.
FTYPE Affiche ou modifie les types de fichiers utilisés dans les associations d'extensions.
GOTO Indique l'exécution d'un fichier de commandes pour une ligne identifiée par une étiquette.
GPRESULT Affiche les informations de stratégie de groupe pour un ordinateur ou un utilisateur.
GRAFTABL Permet à Windows d'afficher un jeu de caractères en mode graphique.
HELP Affiche des informations sur les commandes de Windows.
Afficher, modifier, sauvegarder ou restaurer les listes de contrôle d'accès pour les fichiers et
ICACLS
les répertoires.
IF Effectue un traitement conditionnel dans un fichier de commandes.
LABEL Crée, modifie ou supprime le nom de volume d'un disque.
MD Crée un répertoire.
MKDIR Crée un répertoire.
MKLINK Créer des liens symboliques et des liens réels
MODE Configure un périphérique du système.
MORE Affiche la sortie écran par écran.
MOVE Déplace un ou plusieurs fichiers d'un répertoire à un autre.
OPENFILES Affiche les fichiers partagés ouverts à distance par les utilisateurs.
PATH Affiche ou définit le chemin de recherche des fichiers exécutables.
PAUSE Interrompt l'exécution d'un fichier de commandes et affiche un message.
POPD Restaure la valeur précédente du répertoire actif enregistrée par PUSHD.
PRINT Imprime un fichier texte.
PROMPT Modifie l'invite de commande de Windows.
PUSHD Enregistre le répertoire actif puis le modifie.
RD Supprime un répertoire.
RECOVER Récupère l'information lisible d'un disque défectueux.
REM Insère un commentaire dans un fichier de commandes ou CONFIG.SYS.
REN Renomme un ou plusieurs fichiers.
RENAME Renomme un ou plusieurs fichiers.
REPLACE Remplace des fichiers.
RMDIR Supprime un répertoire.
ROBOCOPY Utilitaire avancé pour copier les fichiers et les arborescences de répertoires
SET Affiche, définit ou supprime des variables d'environnement Windows.
SETLOCAL la localisation des modifications d'environnement dans un fichier de commandes.
SC Affiche ou configure les services (processus en arrière-plan).
SCHTASKS Planifie les commandes et les programmes à exécuter sur l'ordinateur.
SHIFT Modifie la position des paramètres remplaçables dans un fichier de commandes.
SHUTDOWN Permet un arrêt local ou distant correct de l'ordinateur.
SORT Trie les entrées.
START Ouvre une fenêtre séparée pour l'exécution d'un programme ou d'une commande spécifique.
4
SUBST Associe un chemin d'accès à une lettre de lecteur.
SYSTEMINFO Affiche les propriétés et la configuration spécifiques de l'ordinateur.
TASKLIST Affiche toutes les tâches en cours d'exécution, y compris les services.
TASKKILL Termine ou interrompt un processus ou une application en cours d'exécution.
TIME Affiche ou définit l'heure du système.
TITLE Définit le titre de la fenêtre pour une session CMD.EXE.
TREE Affiche le graphisme de la structure de répertoire d'un lecteur ou d'un chemin d'accès.
TYPE Affiche le contenu d'un fichier texte.
VER Affiche la version de Windows.
VERIFY Demande à Windows de vérifier si vos fichiers sont correctement écrits sur le disque.
VOL Affiche le nom et le numéro de série d'un volume de disque.
XCOPY Copie les fichiers et les arborescences de répertoires.
WMIC Affiche les informations WMI dans l'interface de commande interactive.

Premier Script
Étape 1: L'éditeur de texte
Vous pouvez utiliser le bloc note windows, il marchera parfaitement. Sinon si vous faites des scripts plus
complèxes vous aprécierez la coloration syntaxique de Powerbatch, ou de notepad++.
Étape 2: Création du fichier batch
rem la directive rem permet de commenter une ligne au sein
rem d'un fichier batch
rem la commande echo off permet de désactiver l'affichage des commandes
rem @ pour demander à ce qu'une commande n'apparaisse pas à l'écran
rem avant d'être exécutée
echo off
rem la commande cls de mettre à blanc l'affichage effaçant
rem toutes les lignes précédentes
cls
rem la commande echo txt permet d'afficher du txt dans la fenêtre dos
echo Voilà mon premier batch
rem la commande pause permet d'arreter le script en
rem demandant une action de l'utilisateur
pause
Étape 3: Enregistrement
Une fois le fichier taper il faut l'enregistrer avec une extension spécifique .bat, en selectionnant le Type "All
Types(*.*), pour l'éditeur bloc note.

Le fichier ainsi crée apparaît comme ceci sous Windows.

Il est également possible d'enregistrer le fichier sous l'extension .cmd ou encore grâce à powerbatch de le
compiler en .com.
Étape 4: Exécution
Pour l'éxécuter double cliquez simplement sur le fichier. Vous pouvez sinon l'éxécuter dans une tâche
planifiée de programmer le lancement tous les jours par exemple.

5
Voilà comment créer un script n'ayant aucun intérêt :
-) voyons dans la suite comment faire un script plus sophistiqué intégrant des variables.
Copier / Coller
pour réaliser une copie vers votre fenêtre MS-DOS sélectionner le texte à copier puis faite un clic droit dans
la fenêtre. A l'inverse si vous souhaité copier une commande de votre fenêtre MS-DOS vers un fichier batch,
faite un clic droit puis sélectionner le texte à copier, une fois en blanc faite un clic droit sur la région
sélectionnée. Votre texte est désormais copier, vous pouvez le coller dans votre fichier batch.
L'éditeur Powerbatch
PowerBatch sert à créer facilement des fichiers batch (*.bat). Cette application permet d'inclure sans notions
de programmation (à l'aide d'assistants) les commandes batch les plus fréquentes afin d'automatiser certaines
tâches ou de créer aisément de petits programmes exécutables.
Il est également possible de compiler les fichiers batch produits pour les transformer en applications
DOS/Windows (*.com), en proposant un support graphique à l'utilitaire Bat2Exec.

Les Variables
Définition et utilisation d'une variable
Variable permet de stocker une donnée indiquée, à tous moment dans le script on pourra faire appel à elle.
rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem définition de la valeur de la variable
set variable=1
rem affiche du texte en rappelant la variable grâce aux %
echo la valeur de la variable est %variable%
rem arrêt
pause
Résultat:

L'appel de la variable, se fait en plaçant des % autour du nom de la variable.


Demande de valeur à l'utilisateur
Il semble intéressant d'interagir avec l'utilisateur en demandant une variable. Cela est possible grâce à
l'utilisation du paramètre "/p", passer à la commande set, comme nous le montre cet exemple:
rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem le /p permet de demander le retour de la variable
set /p prenom= Quel est votre prenom :
rem remise à blanc
cls
rem affiche le texte avec la variable rentrée
echo Ca va %prenom%, tu a un joli prenom :-)
rem arrêt
pause

Résultat:

6
Les variables d'environnement
Nous avons vu comment définir des variables, en demander à l'utilisateur, mais Windows possède un certain
nombre de variables déjà renseignées, concernant votre système. Pour tester vous pouvez essayer ce script.
rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem liste des variables
echo Salut %USERNAME%,nous sommes le %DATE%
echo il est %Time% déjà!,
echo %RANDOM% est un chiffre al‚atoire.
echo Ton PC se nomme %COMPUTERNAME%,
echo il possŠde %NUMBER_OF_PROCESSORS% processeur,
echo c'est une architecture %PROCESSOR_IDENTIFIER%
rem arrêt
pause

Liste des variables d'environnement:


ALLUSERSPROFILE Path TMP
APPDATA PATHEXT USERDOMAIN
CLASSPATH PROCESSOR_ARCHITECTU USERNAME
CommonProgramFiles RE USERPROFILE
COMPUTERNAME= PROCESSOR_IDENTIFIER windir
ComSpec PROCESSOR_LEVEL DATE
DEVMGR_SHOW_DETAILS PROCESSOR_REVISION TIME
FP_NO_HOST_CHECK ProgramFiles CD
HOMEDRIVE PROMPT RANDOM
HOMEPATH QTJAVA ERRORLEVEL
LOGONSERVER SESSIONNAME CMDEXTVERSION
NUMBER_OF_PROCESSOR SystemDrive CMDCMDLINE
S SystemRoot
OS TEMP
Découpage d'une variable pour extraire certaines parties de la variable afin de les retraitées.
Principe: Prenons la variable d'environnement %ProgramFiles%
echo %ProgramFiles% donne C:\Program Files
Désormais nous souhaitons conserver uniquement le lecteur "c:\" echo %ProgramFiles:~0,3%
L'ajout du ":~" qui indique le découpage, les valeurs suivantes "0,3" indiquent comment la découper. En
effet le 0 indique que le début de la sélection est le 0eme caractère, le 3 indique qu'elle s'arrête au 3eme.
Autre solution possible, par suppression de caractères: echo %ProgramFiles:~,-13%
Conservons le nom "Program Files" : PAR echo %ProgramFiles:~3,13% OU echo %ProgramFiles:~3%
Exemple: Le @ masque la commande ECHO OFF, et la commande masque toutes les suivantes.
rem désactive l'affichage des commandes
@echo off
rem remise à blanc de l'écran
cls
echo variable de base date: %date%
rem découpage %date:~0,2%
rem 1er chiffre numéro du caractère de début de la sélection
rem 2eme chiffre nombre de caractères après le début
7
echo Nous sommes le %date:~0,2% le %date:~3,2%eme mois de l'ann‚e
%date:~6,4%
rem arrêt
pause
Résultat:

Calculs simple avec des variables


Grâce aux batch il est possible de faire des opérations simples telle qu'une addition, soustraction,
multiplication ou encore division. Cela est possible avec la commande set /a.
@echo off echo 10 * 2 = %mult%
echo Addition pause
set /a add = 5+5
echo 5 + 5 = %add% Résultat:
echo.
echo Soustraction
set /a sous = 10-5
echo 10 - 5 = %sous%
echo.
echo Division
set /a div = 10/2
echo 10 / 2 = %div%
echo.
echo Multiplication
set /a mult = 10*2

Il est possible de donner des priorités aux opérations grâce aux


parenthèses. Résultat:
@echo off
echo Priorit‚ op‚ratoire
set /a pri = ((10*5)*2 + (10*5)*2)/2
echo ((10*5)*2 + (10*5)*2)/2 = %pri%
pause

Fonctions
Les fonctions dans les scripts permettent d'augmenter considérablement les possibilités des batchs.
Les étiquettes
La fonction étiquette permet d'intervenir sur le séquencement, typiquement votre script va exécuter les
commandes les une à la suite des autres. Pour casser tout ça les étiquettes permettent d'accéder directement à
un endroit du script.
rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem définition du point de retour
:boucle
rem affiche le texte salut
echo salut

8
rem -indique
EQU égal à de retourner àLSS la - :boucle
inférieur à GTR - supérieur à
goto boucle
NEQ - différent de LEQ - inférieur ou égal à GEQ - supérieur ou égal à
CeExemple
script va: afficher salut à l'infini, grâce à la boucle formée avec (le saut ) retour sur la directive :boucle.
Avec des SI ont pourrait mettre Paris en bouteille, démontrons que cela est possible.
la fonction IF / ELSE
echo off If permet de définir une condition, ainsi il %
La fonction estfois Paris
possible en bouteille
de définir une comparaison qui fera
cls
accepter ou non la condition. pause
rem défini
Structures de le point de retour
la commande:
:boucle
IF "chaîne1" comparant "chaîne2" (action) Résultat:
rem définit une
IF "chaîne1" variable
comparant "chaîne2" (action1) else (action2)
incrémenté
Exemple: de 1 à chaque passage
set
IF ot /aEQUcount ot = count
(echo la+tete1 a ot)
rem
IF ot affiche
EQU atla variable
(echo la tete à chaque
a ot) else ( echo ot différent de at)
passage
Les comparants utilisables sont:
echo %count%
rem SI %count% est égal à 10
alors aller au saut :fin
if %count%==10 goto fin
goto boucle
:fin
rem Insertion d'une une variable
echo Grace a des SI on mis %count
Ici nous avons donc utilisé les SI afin de créer une
condition pour sortir de la boucle.

Tests sur des fichiers


Il est possible en batch de faire des tests sur des fichiers
Test sur l'existence d'un fichier
echo off
cls
rem test la présence du fichier temp.bat alors afficher
rem existe sinon afficher existe pas.
if exist temp.bat (echo existe) else echo existe pas
pause
Test sur la non-existence d'un fichier
rem désactive l'affichage des commandes
echo off
rem remise à blanc de l'écran
cls
rem test la présence du fichier temp.bat alors
rem afficher existe sinon afficher existe pas.
if not exist temp.bat (echo existe pas ) else echo existe
pause

La fonction CHOICE
Comme son nom l'indique elle permet de faire un choix est d'être redirigé vers un saut. exemple :
Echo off
:debut
cls
Echo Question: Quelle est la capitale de la suŠde ?
Echo .
Echo R‚ponse a: Olso
Echo R‚ponse b: Stokholm
Echo R‚ponse c: Reykjavik
9
Echo q: Quitter
rem la commande choice utilise une liste de paramètres ici abcq qui font
rem référence à 4 niveau d'erreur a fait référence au 1
CHOICE /C:abcq Faites votre choix
IF %ERRORLEVEL%==1 goto a
IF %ERRORLEVEL%==2 goto b
IF %ERRORLEVEL%==3 goto c
IF %ERRORLEVEL%==4 goto q
:a
cls
echo Perdu ! la capitale de la suŠde n'est pas Olso mais Stokholm
GOTO Fin
:b
cls
echo Gagn‚e ! la capitale de la suŠde est bien Stokholm
GOTO Fin
:c
cls
echo Perdu ! la capitale de la suŠde n'est pas Reykjavik mais Stokholm
GOTO Fin
:Fin
pause
goto debut
:q

La fonction FOR
permet de parcourir un ensemble de lignes d'un fichier, et d'exécutera des actions pour l'élément parcouru.
Structure simple:
FOR /f %%variable IN (ensemble) DO commande
On peut noter que les variables utilisées ici, ne sont pas de la forme %var%, mais de la forme %%a.
Exemple:
@echo off
del temp.txt
rem création d'un fichier
echo 1 >> temp.txt
echo 2 >> temp.txt
echo 3 >> temp.txt
echo 4 >> temp.txt
echo 5 >> temp.txt
rem visualisation du contenu
echo le fichier temp.txt contient les lignes suivantes:
more temp.txt
echo.
echo Pour chaque ligne du fichier afficher son contenu
FOR /f %%i IN (temp.txt) DO (
echo ligne %%i
)
pause

10
Structure "complèxe":
@FOR /f "tokens=2 delims=," %%a in (c:\data.txt) do (
@echo %%a
)
pause
Dans cette exemple nous ajoutons deux paramètres:
Tokens: Ce paramètre indique que la variable %%a prendra la deuxieme colonne du fichier c:\data.txt.
Delims: indique que le délimiteur est la ‘,’ ce séparateur délimite en fait les colonnes du fichier c:\data.txt.
Pour pouvoir intérroger chaque colonne d'un fichier il faut modifier le paramètres "token". Si "tokens=1,2"
alors un "echo %%a" ramènera la valeur de la première colonne et un "echo %%b" ramènera la valeur de la
deuxième colonne.
La fonction FIND
recherche dans un fichier, tableau Grâce aux batchs il est possible à l'intèrieur d'un fichier texte de faire une
recherche, à la fois sur une ligne et sur une colonne.
Tout d'abord il est préférable d'utiliser des fichiers possédant des séparateurs simples, comme par exemple
les fichiers .cvs .txt avec le délimiteur virgule.
Fichier: c:\data.txt
1,pierre,martin 4,thomas,froger 7,ines,bertrand
2,antoine,dupont 5,marie,simon 8,kenza,fournier
3,marcel,roger 6,lea,robert 9,laure,richard
Sélection d'une ligne:
find "4" c:\data.txt
pause
Grâce à au find nous avons sélectionné la ligne
numéro 4.

Sélection d'une colonne:


A l'aide, de la fonction FOR il est possible de
sélectionner une colonne au sein d'un fichier avec
délimiteur.
@FOR /f "tokens=2 delims=," %%i
in (c:\data.txt) do @echo %%i
pause
Il est possible avec la fonction FOR d'exécuter
plusieurs commandes dans le do, en intégrant des
parenthèses, avec ce batch nous pouvons afficher
la 2ème colonne du fichier don les séparateurs
sont des ","
Combinaison des deux:
@echo off
rem définition de la variable vari qui définie la place recherchée
set /p vari=Quelle place cherchez-vous (1-9)?
rem enregistre dans le fichier tmp.txt la ligne contenant le numéro indiqué

11
find "%vari%" c:/data.txt >> tmp.txt
rem dans le fichier tmp.txt sélection de la colonne 2 à 3, la colonne 2 %%i

rem la colonne 3 %%j


FOR /f "tokens=2-3 delims=," %%i in (tmp.txt) do @echo le num‚ro %vari%
est %%i %%j
del tmp.txt
pause

Création d'un compteur


La création d'un compteur peut être très utile dans certaines situations, exemple compteur pour retarder
certaines commandes. Il s'agit de créer une boucle à l'aide d'une étiquette incrémentant une variable : ‘count’
rem temporistation
:boucle
set /a count = count + 1
if %count%==1000 goto finboucle
goto boucle
:finboucle
En jouant sur le seuil de déclenchement, ici "1000" nous pouvons faire varier la durée de la temporisation.
Windows Vista : vous pouvez directement utiliser la commande timeout

Les paramètres
Sont en fait des variables que utilisateur peut introduire à l'exécution du script, exemple simple.

echo off
echo J'ai pass‚ le paramŠtre : %1
pause
Ce micro script permet grâce à la variable %1 de
récupérer le premier mot passé en paramètre au
script. Comme %2 et le deuxième paramètre au
script. Mais regardons plutôt le résultat:
Et voilà rien de compliquer, mais cette fonction peut s'avérer utile dans certaines situations.
Affichage
Afin de rendre plus agréable votre script, il est possible de personnaliser légèrement l'affichage.
Couleurs texte et arrière-plan sous MS-DOS
Pour commencer il est possible de modifier les couleurs, vous avez sûrement remarquer qu'il était possible
de modifier les couleurs grâce à un clic droit dans la barre de titre d'une fenêtre MS-DOS.
Et Bien il est possible d'intégrer cette fonctionalité dans vos scripts grâce à la commande " color ".
0=Noir 8 =Gris
1=Bleu 9 =Bleu clair
2=Vert A=Vert clair
3=Turquoise B=Turquoise clair
4=Rouge C=Rouge clair
5=Violet D=Violet clair
6=Jaune E =Jaune clair
7=Gris clair F =Blanc

12
Pour définir le texte et l'arrière-plan la commande "color code:arrièreplan code:texte". comme ci-dessous.
@echo off
color F0
echo Mon script est en couleurs super !
pause
Les Cadres
Il est possible de créer des faux cadres afin d'avoir une interface plus agréable. Pour crée ces faux cadres il
faut utiliser des caractère spéciaux, ainsi:
@echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
@echo ºQuel joli cadre !º
@echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
pause
Nom de la fenêtre MS-DOS : la commande "title" permet de remplacer le joli Invite de commande .
exemple:
@title Batcher !
pause

Exécution en fenêtre réduite


Lorsque vous exécuter un batch automatiquement au démarrage de l'ordinateur ou encore en tâche planifier,
il est souvent utile de masquer l'exécution du batch pour le rendre transparent aux yeux des utilisateurs.
 Il faut tout d'abord crée un raccourci vers le fichier batch (clic droit) ;
 Ensuite il faut aller voir les propriétés du raccourci ;
 Enfin vous trouverez trois modes d'exécution, Fenêtre normale, Réduite, Agrandie, sélectionnez Réduite.
Voilà le batch sera désormais visible uniquement dans la barre des tâches, vous pouvez mettre le raccourci
dans Démarrer -> Tous les programmes -> Démarrage pour une exécution au démarrage de l'ordinateur.
La taille : la commande mode con voici sa syntaxe : mode con cols=80 lines=90
Le chiffre après cols= définit le nombre de colonnes de l'invité (une colonne fait la taille d'un caractère) et
celui après lines= le nombre de lignes. Pour info : 1 ligne= 2 colonne
Effacer l'ecran
La commande cls « effacement de l'écran » : remettre à blanc toutes les lignes de la fenêtre DOS

Exemple script affichage : Voilà un petit script regroupant toutes les notions que nous avons vu.
@title http:\Batcher.fr
@set t=0
:boucle
cls
@color %t%
@echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
@echo ºQuel joli cadre !º
@echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
@set /a t = t + 1
if %t%==99 goto fin
goto boucle
:fin
pause
Exemples
Dans cette section : des exemples de scripts ayant diverses utilités, référez aux sections précédant pour
comprendre le fonctionnement.
Script de sauvegardes
Ce script permet de faire des sauvegardes incrémentielles sur une machine distante appartenant au réseau.
rem désactive laffichage des commandes
@ echo off
rem //////////////////////Début Région Modifiable//////////////////////
13
rem nom du serveur à synchroniser
set srv=\\ZEUS
rem définition du répertoire de log, le nom de fichier correspondra au
rem jour mois et année
set log=c:\log\%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.txt
rem défint ion du répertoire locale source de la copie
set source=D:\sauvegardes
rem définition du répertoire locale destination de la copie
set dest1=%srv%\partages\sauvegardes
rem /////////////////////Fin Région Modifiable//////////////////////////
rem permet de mettre à blanc lécran
cls
rem change la couleur texte + fond (3+a) ici fond noir texte vert
color 0a
rem nom de la fenêtre MS-DOS
title Sauvegarde de %computername% vers %srv%
rem test de présence du serveur
echo %srv%>temp.txt
for /F %%i IN (temp.txt) DO (PING -n 2 -w 4 %%i | FIND "TTL=">NUL
IF NOT ERRORLEVEL 1 goto ok)
goto non
:non
set msg=Le serveur %srv% ne r‚pond pas, pas de sauvegarde possible
goto fin
:ok
rem compteur de temps de traitements
set debhour=%time:~0,2%
set debmin=%time:~3,2%
set debsec=%time:~6,2%
rem ////////////////////////////////////////////////////////////////////
echo ---------------------------------------------------------- >> %log%
echo Rapport de la sauvegarde de %computername% du %date% à %time% >> %log%
echo ---------------------------------------------------------- >> %log%
cls
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³ Synchronisation de lhorloge avec le serveur en cours patientez... ³
echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
net time %srv% /set /yes
rem ////////////////////////////////////////////////////////////////////
cls
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³ Synchronisation des fichiers sur le serveur en cours patientez... ³
echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
rem copie tous les fichiers et répertoire source dans le répertoire destination
rem copie les fichiers qui été modifiés, en se basant sur la date de création
rem de fichier ce qui explique la synchronisation des horloges au-dessus.
rem Le tout est évidemment envoyé dans un fichier de log.
xcopy /y %source%\*.* %dest1%\ /d /s /e /f >> %log%
cls
rem ////////////////////////////////////////////////////////////////////
rem fin défint ion du point de fin de traitement
set finhour=%time:~0,2%
set finmin=%time:~3,2%
set finsec=%time:~6,2%

14
rem calcul du temp de traitement
set /a hour= %finhour% - %debhour%
set /a min= %finmin% - %debmin%
set /a sec= %finsec% - %debsec%
echo ---------Traitement en %hour%h %min%m %sec%s-------------- >> %log%
rem ////////////////////////////////////////////////////////////////////
set msg=La sauvegarde de %computername% le %date% … %time% en %hour%h
%min%m %sec%s Ok
:fin
@net start messenger
net send %computername% "%msg%"
@net stop messenger
rem lancement du fichier de log
%log%
del temp.txt

Défragmenteur
Ce script permet de défragmenter vos disques durs les uns à la suite des autres en précisant le nom de
lecteurs.
del temp.txt
echo off
rem change la couleur texte + fond (3+a)
color 0a
rem active l'affichage du texte
rem ///////////////Début de la région modifiable////////////////////////
rem définition des partitions à défragmenter
echo c: >> temp.txt
echo d: >> temp.txt
echo e: >> temp.txt
rem echo e: >> temp.txt
rem echo e: >> temp.txt
rem echo e: >> temp.txt
rem echo e: >> temp.txt
rem /////////////////Fin de la région modifiable////////////////////////
rem défragmenter les lecteurs se trouvant dans le fichier temp.txt
FOR /f %%i in (temp.txt) do (
cls
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º D‚fragmentation du %%i º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
defrag %%i -f
)
del temp.txt
pause

Défragmenteur réseau
Ce script permet de défragmenter des postes sur un réseau, en les allumants si des utilisateurs les ont éteints.
rem /////////////////////////ATTENTION//////////////////////////////////
rem Ce script fonctionne seulement si les utilitaires PSEXEC.exe,
rem WOL.exe sont Présents dans un répertoire spécifié
rem /////////////////////////ATTENTION/////////////////////////////////
rem ////////////////////////Fonctionalité de script////////////////////
rem Le script permet de défragmenter une liste de poste sur un réseau,
15
rem en allumant les machines eteinte afin de pouvoir faire la
rem défragmentation. Ensuite si, cette dernière était allumée il l
éteint rem pour qu elle retourne dans son état initial.
rem /////////////////////////Fonctionalité de script////////////////////
@ echo off
cls
rem |||||||||||||||||||définition des variables|||||||||||||||||||||||||
rem demande du nom de pc à traiter
set /p pc=Entrez le nom du poste distant ? (sans slash, respectez la casse)
set up=0
set date=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
rem ||||||||||||||||||||définition des variables||||||||||||||||||||||||
rem ///////////// début Région Modifiable///////////////////////////////
rem définition du fichier ou sera enregistré les logs (pas de slash à la
rem fin de la ligne)
set log=\monserver\defrag\log\%date%.log
rem Le script fait appel à un fichier .csv externe qui possede par ligne
rem le nom l ip et l adresse MAC de tous les poste ayant été connectée
rem au réseau. Le fichier .csv doit etre exporté depuis un serveur DHCP
rem dans la section lease avec un clic droit option exporté au format
rem .csv, avec donc les virgules en séparateurs.
set cvs=\monserver\defrag\list.csv
rem definition du répertoire où sont situées les programmes externes
rem (wol.exe,psexec.exe)
set pgrm=\monserver\defrag\defrag
rem définition d un répertoire temporaire accecible en écriture
set tmp=\monserver\defrag\
rem //////////////// fin Region Modifiable//////////////////////////////
echo _______________________________________________________ >> %log%
echo ------------------------------------ >> %log%
echo Rapport de la tâche de %computername% du %date% à %time% >> %log%
echo ------------------------------------ >> %log%
echo _______________________________________________________ >> %log%
rem --------------------------------------------------------------------
rem -------------------- Début test présence PC ------------------------
rem --------------------------------------------------------------------
rem si la machine répond au ping alors passer la variable up à 1, sinon
rem la laisser à 0
cd \
echo %pc%>temp.txt
for /F %%i IN (temp.txt) DO (PING -n 2 -w 4 %%i | FIND "TTL=">NUL
IF NOT ERRORLEVEL 1 goto ok)
goto non
:non
echo %pc% éteint >> %log%
goto fin
:ok
echo %pc% deja allumé >> %log%
set up=1
:fin
del temp.txt
rem --------------------------------------------------------------------
rem ---------------------- FIN test présence PC -----------------------
rem --------------------------------------------------------------------
16
rem --------------------------------------------------------------------
rem -------------------- Début allumage du pc si éteint ----------------
rem --------------------------------------------------------------------
if "%up%"=="0" goto exec
goto fin2
:exec
rem cree un fichier avec la ligne correspondante au nom du pc
find " %pc%." %cvs% > %tmp%\mac.txt
rem dans ligne prédement séléctionner extraction de la colonne
rem correspondant à l adresse MAC et execution du Wake On Lan sur le
rem réseau. Cette commande est à adapter en fonction de fichier csv
FOR /f "tokens=5 delims=," %%i in (%tmp%\mac.txt) do %pgrm%\wol.exe %%i
echo %pc% démarrer >> %log%
:fin2
rem --------------------------------------------------------------------
rem ------------------ Fin allumage du pc si éteint --------------------
rem --------------------------------------------------------------------
rem ------------------------- Temporisation ----------------------------
rem temporistation pour attendre démarrage de l OS
:boucle
set /a count = count + 1
if %count%==30000 goto finboucle
goto boucle
:finboucle
rem --------------------------------------------------------------------
rem ------------------------- Fin Temporisation ------------------------
rem --------------------------------------------------------------------
rem ---------------- Début défragmentation -----------------------------
rem défragmentation avec le logiciel psexec.exe
%pgrm%\psexec.exe \ %pc% defrag c: >> %log%
rem --------------------------------------------------------------------
rem ---------------------- Fin défragmentation -------------------------
rem --------------------------------------------------------------------
rem --------------------------------------------------------------------
rem ----------- Début extinction du pc si anciennement éteint-----------
rem --------------------------------------------------------------------
if "%up%"=="0" goto exec2
goto fin3
:exec2
shutdown -s -m \ %pc%
echo %pc% extinction >> %log%
:fin3
rem --------------------------------------------------------------------
rem ------------ Fin extinction du pc si anciennement éteint------------
rem --------------------------------------------------------------------
pause

Cleaner
Ce script sert à faire le ménage sur votre pc défrag + nettoyage de disque sur tout vos lecteurs.
echo off
cls
title Cleaner! v1.2
rem définintions des chemins des fichiers de configuration
set log=c:\windows\rapport.txt
17
set conf=c:\windows\confhdd
del %log%
if exist %conf%.txt goto skip
rem scan des disques durs
echo 1 > c:\temp.txt
echo 1 > d:\temp.txt
echo 1 > e:\temp.txt
echo 1 > f:\temp.txt
echo 1 > g:\temp.txt
echo 1 > h:\temp.txt
echo 1 > i:\temp.txt
if exist c:\temp.txt echo c >> %conf%.txt
if exist d:\temp.txt echo d >> %conf%.txt
if exist e:\temp.txt echo e >> %conf%.txt
if exist f:\temp.txt echo f >> %conf%.txt
if exist g:\temp.txt echo g >> %conf%.txt
if exist h:\temp.txt echo h >> %conf%.txt
if exist i:\temp.txt echo i >> %conf%.txt
if exist c:\temp.txt echo c: >> %conf%2.txt
if exist d:\temp.txt echo d: >> %conf%2.txt
if exist e:\temp.txt echo e: >> %conf%2.txt
if exist f:\temp.txt echo f: >> %conf%2.txt
if exist g:\temp.txt echo g: >> %conf%2.txt
if exist h:\temp.txt echo h: >> %conf%2.txt
if exist i:\temp.txt echo i: >> %conf%2.txt
del c:\temp.txt
del d:\temp.txt
del e:\temp.txt
del f:\temp.txt
del g:\temp.txt
del h:\temp.txt
del i:\temp.txt
:skip
rem log
color 0e
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» >>%log%
echo º CLEANER: Rapport º >>%log%
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ >>%log%
echo. >>%log%
echo. >>%log%
echo. >>%log%
echo __________________________________________________________ >> %log%
echo Drives: >> %log%
more %conf%2.txt >> %log%
echo __________________________________________________________ >> %log%

if not exist c:\windows\confclean.txt goto set


goto run
:set
color 0a
cls
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º CLEANER Configuration º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
18
echo.
echo.
FOR /f "tokens=1 delims=," %%i in (%conf%.txt) do cleanmgr.exe /d%%i
/sageset: 1
echo 1 > c:\windows\confclean.txt
:run
color 0b
cls
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º CLEANER: Hard Drive Cleaning º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
echo Nettoyage des disques dur en cours...
cleanmgr.exe /dc /sagerun: 1
echo. >>%log%
echo. >>%log%
rem defrag
cls
color 0c
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º CLEANER: Hard Drive Defragmenting º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
FOR /f "tokens=1 delims=," %%i in (%conf%2.txt) do (
echo. >>%log%
echo. >>%log%
echo. >>%log%
echo __________________________________________________________ >> %log%
echo Défragmmentation de %%i >> %log%
echo __________________________________________________________ >> %log%
echo D‚fragmentation du disque %%i en cours...
defrag %%i /f >> %log%
echo. >>%log%
echo. >>%log%
)
rem rapport
cls
more %log%
pause

19

Vous aimerez peut-être aussi