DOS/Version imprimable
Une version à jour et éditable de ce livre est disponible sur Wikilivres,
une bibliothèque de livres pédagogiques, à l'URL :
https://fr.wikibooks.org/wiki/DOS
Introduction
Le DOS (Disk Operating System) est un système d'exploitation mono-tâche datant des débuts des ordinateurs personnels. Le plus connu est MS-DOS, de la société Microsoft, qui a été choisi par IBM pour équiper ses tout premiers PC (Personal Computer), et a ensuite été présent sur la plupart des « compatibles » ; il n'est maintenant plus maintenu. Un concurrent a été DR-DOS, racheté et renommé plusieurs fois et finalement abandonné. Actuellement il existe FreeDOS, un DOS gratuit et open-source.
Les différentes versions de Windows NT (2000, NT4, XP et Vista) offrent une interface en ligne de commande, qu'on appelle parfois « fenêtre DOS ». La présentation et certaines commandes sont semblables au MS-DOS. De même, les systèmes Windows reposant (en partie) sur une couche MS-DOS (Windows 3.x, 95, 98, et ME) permettaient également un accès au DOS à l'intérieur d'une fenêtre.
Les commandes permettent la manipulation de fichiers et de répertoires, l'exécution d'applications, et l'exécution de scripts de traitement par lots (fichiers batch).
Syntaxe des commandes
modifierLa syntaxe d'une commande est la suivante :
- nom de la commande : commande interne ou chemin de l'application (fichier exécutable ou script) à lancer,
- arguments de cette commande.
Le séparateur utilisé est le caractère espace.
Chemin des fichiers
modifierBeaucoup de commandes utilisent des chemins pour désigner les fichiers traités. Un chemin est une suite de caractères désignant le chemin de la façon suivante :
- soit le chemin donné est absolu, il désigne alors un fichier précis quel que soit le contexte,
- soit le chemin donné est relatif au chemin contextuel courant (répertoire de travail), le fichier désigné dépend donc du contexte.
Contrairement au monde Unix, le caractère séparant les différentes parties est le backslash (\).
Fichiers et répertoires
modifierUn fichier contient des données. Un répertoire contient des fichiers et d'autres répertoires.
La syntaxe générale
modifierUn chemin est composé des éléments suivants (chacun étant optionnel sauf indication contraire) :
- une lettre de lecteur suivie du caractère deux-points, sinon le lecteur utilisé est le lecteur contextuel courant,
- le caractère anti-slash pour partir de la racine du lecteur, si ce caractère est présent, le chemin est absolu, sinon il est relatif au répertoire courant (du lecteur désigné ou courant),
- la suite de répertoires où se trouve le fichier, chaque répertoire étant suivi du caractère anti-slash,
- (obligatoire) le nom du fichier ou répertoire désigné.
Le DOS ne distingue pas les minuscules des majuscules. C'est à dire que les chemins suivants désignent le même fichier :
c:\Dos\command.com
C:\dos\command.COM
C:\DOS\Command.Com
C:\dOs\CoMmAnD.CoM
Les lettres de lecteur
modifierLes lettres de lecteur sont toujours suivies du caractère deux-points et désignent un support particulier. Ce support peut être :
- un lecteur de disquette,
- un disque dur,
- une partition du disque dur,
- un disque virtuel en RAM,
- un lecteur réseau,
- un pseudo-lecteur pointant un répertoire.
Le lecteur contextuel courant est modifié en tapant la lettre de lecteur suivie du caractère deux-points. L'invite de commande par défaut indique le lecteur courant et le répertoire de travail courant sur ce lecteur.
Exemples :
C:\DOS> a:
A:\> c:
C:\DOS>
En règle générale, les lecteurs sont assignés de la manière suivante :
- le lecteur A: désigne le premier lecteur de disquettes,
- le lecteur B: désigne le deuxième lecteur de disquettes,
- le lecteur C: désigne la première partition du disque dur,
- les lecteurs suivants (D:, E: ...) désignent les partitions suivantes,
- les lecteurs suivants désignent les lecteurs/graveurs de CD ou DVD,
- les lecteurs suivants désignent les supports amovibles (Clé USB, ...).
Répertoires spéciaux
modifierDeux répertoires spéciaux sont définis dans chaque répertoire du système de fichiers :
- le répertoire courant nommé
.
désigne le répertoire lui-même, - le répertoire parent nommé
..
désigne le répertoire contenant celui-ci.
C'est à dire que les chemins suivants désignent le même répertoire :
C:\Windows
C:\Windows\.
C:\Windows\System\..
C:\Windows\.\System\..
C:\Windows\.\.\System\..\.
Le répertoire contextuel courant
modifierL'environnement de l'interpréteur de commandes garde en mémoire le répertoire de travail pour chaque lecteur. Ce répertoire est modifié par la commande Chdir (ou Cd). Certaines versions fournissent également les commandes Pushd et Popd.
Exemples :
C:\> cd dos
C:\DOS> cd ..
C:\> cd a:\drivers
C:\> a:
A:\DRIVERS>
Ce répertoire de travail permet de désigner de façon plus concise les fichiers et sous-répertoires qu'il contient. Il permet de déterminer le chemin absolu d'un fichier à partir d'un chemin relatif.
Redirection
modifierIl est possible de rediriger l'entrée et les sorties standards de la commande depuis/vers un fichier texte, en utilisant les caractères suivants :
<
pour lire les données depuis un fichier au lieu du clavier,>
pour enregistrer la sortie de la commande dans un nouveau fichier au lieu de l'afficher à l'écran,>>
pour enregistrer la sortie de la commande à la fin d'un fichier existant au lieu de l'afficher à l'écran.
Exemples :
date < input1.txt > output.txt
time < input2.txt >> output.txt
Il est possible de faire précéder le signe > par le numéro du flux standard redirigé :
- 1 désigne la sortie standard (stdout),
- 2 désigne la sortie d'erreur (stderr).
Par défaut il s'agit du flux 1 (sortie standard).
Exemple :
date < input1.txt 1> output.txt 2> error.txt
Il est également possible de rediriger un flux vers l'autre, afin par exemple de les rediriger tous les deux vers le même fichier. Dans ce cas, l'un des deux est redirigé vers l'autre en le nommant après le caractère & :
date < input1.txt 1> output_and_error.txt 2>&1
Enfin, il est possible de rediriger une commande vers NUL au lieu d'un fichier pour simplement masquer l'affichage de la commande :
DATE > NUL
Enchaîner les commandes
modifierLes commandes sont en général séparées par un retour à la ligne. Elles sont exécutées l'une après l'autre, quel que soit les erreurs qui peuvent se produire. On peut également les placer sur la même ligne en les séparant par les caractères suivants :
- & pour enchaîner les commandes comme avec le retour à la ligne.
Exemple :
copy D:\a.txt C:\ & delete D:\a.txt
- && pour enchaîner les commandes seulement si la commande qui précède ne retourne pas d'erreur.
Exemple :
copy D:\a.txt C:\ && delete D:\a.txt
- || pour enchaîner les commandes seulement si la commande qui précède retourne une erreur.
Exemple :
copy D:\a.txt C:\ || copy E:\a.txt C:\
Grouper les commandes
modifierLes parenthèses permettent de grouper les commandes, afin par exemple de rediriger leurs sorties de la même manière. Exemple :
(echo Première commande & echo Deuxième commande) > commandes.txt
Caractères spéciaux
modifierCertains caractères spéciaux sont interprétés :
- Le caractère espace sépare les arguments,
- Les caractères <, >, >>, | servent à rediriger les flux standards de la commande,
- Les caractères &, && et || servent à l'enchaînement des commandes
- Le retour à la ligne sépare les commandes.
Certains cas nécessitent leur utilisation sans interprétation (messages, ...). Pour éviter l'interprétation d'un caractère, il faut le faire précéder du caractère accent circonflexe :
echo Des caractères spéciaux : ^< ^> ^& ^| ^^ et un message ^
s'étalant sur 2 lignes mais affiché sur une
Cependant, ceci ne fonctionne pas avec le caractère espace (dans un nom de fichier par exemple). Dans ce cas, il faut utiliser les guillemets :
"C:\Program files\Exemple.exe"
Masquage du retour de commande
modifierDans un script, pour ne pas afficher une commande, tout en conservant le retour, il suffit d'ajouter le caractère @
.
Pour l'appliquer sur tout le script, il suffit d'utiliser la commande Echo à laquelle il est possible d'ajouter le @ pour ne pas voir la première commande ECHO.
@ECHO OFF
Le @ masque la commande ECHO OFF, et la commande masque toutes les suivantes.
Noms de fichier spéciaux
modifierCertains noms de fichier sont réservés aux périphériques systèmes :
NUL
- Périphérique nul : toute écriture est absorbée, et la lecture ne retourne rien (vide) ;
CON
- Console : clavier et écran ;
CONIN$
- Console input : clavier ;
CONOUT$
- Console output : écran ;
LPT1
- Port parallèle 1 ;
LPT2
- Port parallèle 2 ;
COM1
- Port série 1 ;
COM2
- Port série 2 ;
AUX
- Périphérique auxiliaire (en général équivalent à COM1) ;
PRN
- Imprimante (en général équivalent à LPT1).
Obtenir de l'aide
modifierLa plupart des commandes acceptent le paramètre /?
pour afficher l'aide sur la commande (rappel de syntaxe, paramètres et options).
Exemple :
for /?
Il est également possible d'utiliser la commande help
suivie du nom de la commande à documenter.
Exemple :
help for
Boucle
modifierAfficher une séquence :
for %x in (a,b,c) do echo %x
Déplacer des fichiers selon leurs noms :
for %x in (a,b,c) do move c:\myfiles\%x*.doc c:\abcfiles\
Liste alphabétique des commandes
modifier
At
Commande qui sert à faire des tâches planifiées sous Windows en ligne de commande.
Attrib
Description
modifierAffiche ou change les attributs de fichiers ou dossiers.
Syntaxe
modifierATTRIB attributs ajoutés/retirés lecteur:\chemin\nom_de_fichier.extension options
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [+I|-I] [lecteur:][chemin][nom_de_fichier] [/S] [/D] [/L]
Attributs
modifier+
- Ajoute un attribut (ex.: +H).
-
- Retire un attribut (ex.: -H).
R
- Fichiers en lecture seule.
A
- Fichiers archives.
S
- Fichiers système.
H
- Fichiers cachés.
I
- Fichiers indexés sans contenu.
Chemin
modifier[lecteur:][chemin][nom_de_fichier]
- Spécifie un ou plusieurs fichiers à traiter par ATTRIB.
Options
modifier/S
- Traite les fichiers correspondants dans le dossier actif et tous ses sous-dossiers.
/D
- Traite également les dossiers.
/L
- Effectue l'opération sur les attributs du lien symbolique plutôt que sa cible.
Exemple
modifierPour masquer un fichier :
ATTRIB +H C:\Docs\fichier.txt /D
Break
Interromp l'execution d'un batch.
Call
Introduction
modifierCommande interne DOS, elle est utilisée dans un batch pour appeler un autre fichier batch, ou une sous-routine située à un label particulier du fichier. Après la commande, l'exécution se poursuit à l'instruction suivante.
Utilisation
modifierPour appeler un autre fichier batch :
CALL chemin arguments
Pour appeler une sous-routine située à un label particulier du fichier batch :
CALL :label arguments
Exemple 1 : appeler un autre fichier batch
modifier@ECHO OFF CALL config.bat ECHO Retour au batch principal
Exemple 2 : appeler une sous-routine du fichier batch
modifier@ECHO OFF CALL :affiche C:\Windows CALL :affiche C:\Temp GOTO :eof :affiche ECHO Le contenu du répertoire %1 est : DIR %1 GOTO :eof
Pour sortir du batch ou terminer la sous-routine, le label spécial :eof
est utilisé.
Cd
Introduction
modifierChange Directory
Cette commande permet de changer de répertoire. C'est en fait un raccourci pour Chdir.
Utilisation
modifiercd
Affiche simplement le répertoire courant
cd c:\repertoire
Va dans le repertoire indiqué
cd ..
Remonte dans le répertoire parent
cd .
Ne fait rien, en effet . représente le répertoire courant.
cd \
Remonte à la racine lecteur du répertoire
Si le répertoire courant est C:\WinNT
cd E:\temp
Le répertoire courant affiché est toujours C:\WinNT
, mais en changeant le lecteur :
E:
Le répertoire courant affiché est bien E:\temp
. En fait le système mémorise le répertoire courant pour chaque lecteur.
Il existe une option pour effectuer les deux commandes en une seule :
cd /D E:\temp
Cd
Introduction
modifierChange Directory
Cette commande permet de changer de répertoire. C'est en fait un raccourci pour Chdir.
Utilisation
modifiercd
Affiche simplement le répertoire courant
cd c:\repertoire
Va dans le repertoire indiqué
cd ..
Remonte dans le répertoire parent
cd .
Ne fait rien, en effet . représente le répertoire courant.
cd \
Remonte à la racine lecteur du répertoire
Si le répertoire courant est C:\WinNT
cd E:\temp
Le répertoire courant affiché est toujours C:\WinNT
, mais en changeant le lecteur :
E:
Le répertoire courant affiché est bien E:\temp
. En fait le système mémorise le répertoire courant pour chaque lecteur.
Il existe une option pour effectuer les deux commandes en une seule :
cd /D E:\temp
Cls
Introduction
modifierClear Screen
Cette commande interne du DOS permet d'effacer l'écran (ou la fenêtre) de l'interpreteur de commande.
Utilisation
modifierCls
Exemple:
c:\> cls
Note: Aucune option n'est rattachée a cette commande.
Cmd
Appel de la Console DOS sous Windows.
Chemin d'accès : Démarrer -> Exécuter -> Taper "CMD" puis ENTREE ↵
Color
Introduction
modifierCette commande permet de changer la couleur d'arrière-plan ainsi que celle des caractères.
Utilisation
modifierIl faut entrer color suivi des chiffres suivants :
0 = Noir 1 = Bleu foncé 2 = Vert 3 = Bleu gris 4 = Marron 5 = Pourpre 6 = Kaki 7 = Gris clair 8 = Gris 9 = Bleu clair A = vert clair B = Cyan C = Rouge D = Rose E = Jaune F = blanc
Le premier chiffre sera la couleur de l'arrière-plan, le second sera la couleur des caractères.
color 4B
Dans cet exemple, l'arrière-plan sera marron et les caractères seront en cyan.
Convert
Introduction
modifierCommande interne DOS, elle permet de convertir les volumes FAT en NTFS.
Utilisation
modifierCONVERT [volume:] [format]
Exemple:
c:\convert c: /FS:NTFS
- Le volume doit être défini par sa lettre et les deux points
- Le format est défini par /FS:NTFS (le seul disponible).
Options
- /V Permettant d'avoir plus d'information sur le déroulement de l'exécution
Notes: Si le disque dur à convertir est utilisé, l'application demandera pour se lancer au prochain démarrage.
Copy
Introduction
modifierCopy
Cette commande copie un ou plusieurs fichiers sur un autre emplacement.
Utilisation
modifierCOPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B] [+ source [/A | /B] [+ ...]] [cible [/A | /B]]
Paramètres
modifiersource
- Fichier(s) à copier.
/A
- Indique un fichier texte ASCII.
/B
- Indique un fichier binaire.
cible
- Répertoire et/ou nom de fichier cible.
/V
- Vérifie l'écriture du ou des fichiers cible.
/N
- Utilise un nom de fichier court, s'il est disponible, lors de la copie d'un fichier ayant un nom supérieur à 8.3 caractères.
/Y
- Supprime la confirmation de l'écrasement d'un fichier cible existant.
/-Y
- Demande une confirmation pour écraser un fichier cible existant.
/Z
- Copie les fichiers réseau en mode redémarrage.
L'option /Y
peut être prédéfinie dans la variable d'environnement COPYCMD
.
Il est possible d'annuler cela avec l'option /-Y
de la ligne de commande.
Par l'utilisateur est invité à confirmer l'écrasement à moins que la COPY
ne soit exécutée à partir d'un fichier de commandes.
Pour concaténer des fichiers, spécifier un seul fichier cible et plusieurs sources (avec caractères génériques ou fichier1+fichier2+fichier3) ou un répertoire :
copy directory result.txt
pause
Date
Introduction
modifierLa commande DATE
permet de modifier la date système, ou simplement de la lire.
Utilisation
modifierDATE [/T | date]
Si aucun paramètre n'est spécifié, la commande demande à l'utilisateur la nouvelle date.
Le commutateur /T permet d'afficher la date courante sans rien demander (aucune attente).
Si une date est spécifiée en paramètre, la date système est modifiée.
Résultat
modifierC:\>date
La date du jour est : 06/07/2012
Entrez la nouvelle date : (jj-mm-aa)
Exemple
modifierLecture
modifierLe script suivant récupère le retour de DATE /T
grâce à la commande For et découpe la ligne suivant les caractères / et espace pour ne récupérer que certaines informations.
@ECHO OFF
FOR /F "usebackq tokens=1,2,3,4 delims=/ " %%A in (`DATE /T`) DO (
ECHO Jour de la semaine : %%A
ECHO Jour du mois : %%B
ECHO Mois : %%C
ECHO Année : %%D
)
L'exemple ci-dessus ne fonctionne pas sur le DOS Microsoft Windows [version 6.1.7601] car "DATE /T" n'y affiche pas le jour de la semaine.
Notons qu'il est également possible de passer par la variable d'environnement %DATE%
de la manière suivante :
ECHO Date : %DATE:~%
Date : 14/10/2010
ECHO Jour du mois : %DATE:~0,2%
Jour du mois : 14
ECHO Mois : %DATE:~3,2%
Mois : 10
ECHO Année : %DATE:~6,4%
Année : 2010
- Affichage au format yyyymmdd :
echo %DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
Résultat : 20120706.
Écriture
modifierdate 28-03-2020
Voir aussi
modifier- La commande Time.
Del
Introduction
modifierDelete
Erase
Commande interne DOS, elle permet de supprimer des fichiers.
Utilisation
modifierDEL options noms ERASE options noms
- La liste noms peut employer les caractères génériques
*
et?
.
Options
modifier/P
- Demande une confirmation avant de supprimer un fichier.
/F
- Force la suppression de fichiers en lecture seule.
/S
- Supprime les fichiers dans tous les sous-répertoires.
/Q
- Pas de confirmation avant la suppression si des caractères génériques ont été utilisés (
*
et?
). /A
- Suppression en fonction des attributs :
R
- Fichiers en lecture seule
S
- Fichiers système
H
- Fichiers cachés
A
- Fichiers prêts pour archive
-
- Préfixe de négation
Exemples
modifierdel *.bak
erase *.tmp
del /AH /S thumbs.db
DEL /F /Q /S /A:H C:\*.sqm
Pour supprimer tous les fichiers temporaires de plus de 60 jours (sous les anciennes versions de DOS) :
forfiles /p "C:\Temp" /s /m *.* /c "cmd /c Del @path" /d -60
Sous Windows, le répertoire C:\Temp n'est plus utilisé.
Chaque utilisateur a son répertoire temporaire dont le chemin est donnée par la variable d'environnement TEMP
:
forfiles /p "%TEMP%" /s /m *.* /c "cmd /c Del @path" /d -60
Deltree
Type: External (6.0 et versions ultérieures)
Syntaxe:
DELTREE [/ Y] [d:] chemin [d:] chemin [...]
Objet: Supprime (efface) un répertoire contenant tous les fichiers et sous-répertoires qu'il contient (nouveau avec DOS version 6).
Discussion
Contrairement à la commande RMDIR, la commande DELTREE vous permet de supprimer un répertoire même s'il contient des fichiers et des sous-répertoires. Tous les fichiers et sous-répertoires subordonnés au répertoire que vous supprimez seront également supprimés, quels que soient leurs attributs. Cela signifie que même si un fichier a des attributs cachés, système, en lecture seule ou autres, il sera quand même supprimé. Vous pouvez spécifier plusieurs répertoires à supprimer.
Lorsque vous utilisez des caractères génériques avec la commande DELTREE, vous devez être extrêmement prudent, car les répertoires et les fichiers dont le nom correspond au caractère générique seront supprimés. Utilisez auparavant la commande DIR pour lister et vérifier les répertoires et fichiers qui seront supprimés.
Option
/ Y - Exécute la commande DELTREE sans fournir d'invite pour confirmer la suppression.
Exemples
Pour supprimer le répertoire "letters" situé à la racine du lecteur C:, y compris tous les fichiers et sous-répertoires qu'il contient, entrez
DELTREE c:\letters
Dir
Introduction
modifierLe DOS est le sigle des mots Disk Operating System (système de gestion des disques), c'est un langage de programmation inventé par Microsoft.
Le DOS n'est pas accessible directement à l'utilisateur, c'est un ensemble de routines matérielles et logicielles gérant les différents éléments de l'ordinateur. Ces routines sont regroupées en catégories nommées interruptions.
Windows est lui-même programmé en partie en DOS.
Directory listing
Commande interne de toutes les versions de DOS, permettant de lister les descripteurs, répertoires, (directory) des mémoires de masse attachées au système d'exploitation DOS.
Utilisation
modifierDIR [lecteur:][chem][fichier]
[lecteur:][chem][fichier] Lecteur, répertoire et/ou fichier(s) à afficher.
- DIR : Affiche la liste des répertoires et fichiers du dossier (répertoire) actuel.
- DIR *.ext : Affiche la liste de tous les fichiers ayant l'extension EXT.
- DIR X*.* : Affiche la liste des fichiers commençant par X.
Commutateurs ou options
modifier/P, /W, /A, /O, /S, /B, /L, /C[H]
- /P : Marque une pause à chaque écran lors de l'affichage de la liste des fichiers et dossiers.
- /W : Affiche de manière condensée la liste des fichiers et répertoires sur plusieurs colonnes.
- /A[:]attributs : Affiche les fichiers titulaires des attributs spécifiés.
- D Répertoires
- R Fichiers lecture seule
- H Fichiers cachés
- S Fichiers système
- A Fichiers prêt à archiver
- - Préfixe signifiant "non"
- /O : Affiche les fichiers dans l'ordre spécifié.
- N Nom (alphabétique)
- S Taille (croissante)
- E Extension (alphabétique)
- D Date et heure (chronologique)
- G Répertoires en tête
- - Préfixe pour l'ordre inverse
- C Par taux de compression (par ordre croissant)
- /S : Affiche le catalogue du répertoire courant et de tous les sous-répertoires de celui-ci.
- /B Affiche les noms de fichier seuls.
- /L Affiche le catalogue en minuscules.
- /C[H] : Affiche le taux de compression du fichier;
- /CH Utilise pour l'affichage la taille l'unité d'allocation de l'hôte.
Note : Les différentes options peuvent être combinées.
Les commutateurs ou options peuvent être initialisés dans la variable d'environnement DIRCMD. Fixez les options en préfixant le commutateur par -, ex: /-W.
Lister le contenu d'un répertoire dans un fichier
modifierIl peut être pratique de lister les fichiers d'un répertoire (par exemple, pour tenir un catalogue de fichiers).
La fonction dir permet de lister le contenu d'un répertoire et de le sauvegarder dans un fichier. Il suffit d'utiliser la redirection > :
dir /B c:\nomrep > maliste.txt
Pour lister plusieurs répertoires, il suffit de lancer tout d'abord la commande ci-dessus une première fois. Ensuite, en appliquant la redirection >> aux répertoires suivant, les nouvelles listes sont concaténées dans le fichier :
dir c:\autrerep >> maliste.txt
Diskpart
Introduction
modifierCommande de gestion des partition.
Cette commande permet de contourner les bridages de la gestion des disques Windows 7.
Exemple
modifierPour supprimer le montage du lecteur S (sans effacer la partition) :
list volume
select disk 0
select volume 1
remove letter S
Echo
Introduction
modifierCommande interne DOS, elle permet d'afficher des messages et de basculer le mode echo.
Utilisation
modifierECHO [ON|OFF] ECHO message
Mode echo
modifierQuand le mode echo est actif, le prompt est affiché avant la commande, et en mode batch, toutes les commandes exécutées sont affichées. Quand il est inactif, le prompt n'est pas affiche, et en mode batch, les commandes exécutées ne sont pas affichées au préalable.
Si aucun paramètre n'est fourni, la commande affiche l'état actuel
Message
modifierLe fait que cette commande ait une double utilisation interdit apparemment les messages vides ou ne comportant que le mot ON
ou OFF
. Mais ceci est contourné en utilisant le caractère point (.
) au lieu de espace pour le séparer du message :
echo. echo.on echo.off
Comme pour toute commande DOS, il est également possible d'afficher les caractères normalement interprétés par le DOS, en les précédant du caractère accent circonflexe (^
) :
echo 4 ^< 5 ^&^& 8 ^> 5
affiche :
4 < 5 && 8 > 5
Il est également possible de mettre des chaines de caractère entre guillemets ("
).
Les guillemets seront affichés mais les commandes DOS ne seront pas interprétées :
echo "Athos, Porthos & Aramis"
affiche
"Athos, Porthos & Aramis"
Exemples
modifier@ECHO OFF ECHO Ceci est un message ^& un test
La commande affiche :
Ceci est un message & un test
Edit
Introduction
modifierLa commande EDIT est en réalité un programme DOS qui permet d'éditer des fichiers textes sous une console DOS. Sous windows, l'encodage de l'affichage n'est pas de l'ASCII, mais un autre codage (Latin-1 ou ISO8859-1 pour la France) dont la moitié des caractères sont en commun. Dans une console DOS, le codage utilisé est de l'ASCII étendu. Ainsi, le caractère 'é' entré dans un éditeur windows (quel qu'il soit) est codé différemment et apparait en 'Ú' dans la console. La commande EDIT permet d'écrire dans les fichier en utilisant l'encodage ASCII étendu qui sera utilisé lors de l'exécution du script. C'est pourquoi, il est recommendé d'écrire un script sous windows, puis de l'éditer sous EDIT. En effet, tous les caractère du type 'é' apparaitront sous EDIT en 'Ú'. Il est alors facile de repérer ces caractères et de les modifier en caractères corrects.
Utilisation
modifierEDIT [fichier]
Ouvre l'éditeur de fichier DOS avec ou sans un fichier.
Sous Windows 10, 'edit' n’est pas reconnu en tant que commande interne. Ils recommandent "notepad" à la place.
Exemple
modifieredit C:\Windows\System32\drivers\etc\hosts
Del
Introduction
modifierDelete
Erase
Commande interne DOS, elle permet de supprimer des fichiers.
Utilisation
modifierDEL options noms ERASE options noms
- La liste noms peut employer les caractères génériques
*
et?
.
Options
modifier/P
- Demande une confirmation avant de supprimer un fichier.
/F
- Force la suppression de fichiers en lecture seule.
/S
- Supprime les fichiers dans tous les sous-répertoires.
/Q
- Pas de confirmation avant la suppression si des caractères génériques ont été utilisés (
*
et?
). /A
- Suppression en fonction des attributs :
R
- Fichiers en lecture seule
S
- Fichiers système
H
- Fichiers cachés
A
- Fichiers prêts pour archive
-
- Préfixe de négation
Exemples
modifierdel *.bak
erase *.tmp
del /AH /S thumbs.db
DEL /F /Q /S /A:H C:\*.sqm
Pour supprimer tous les fichiers temporaires de plus de 60 jours (sous les anciennes versions de DOS) :
forfiles /p "C:\Temp" /s /m *.* /c "cmd /c Del @path" /d -60
Sous Windows, le répertoire C:\Temp n'est plus utilisé.
Chaque utilisateur a son répertoire temporaire dont le chemin est donnée par la variable d'environnement TEMP
:
forfiles /p "%TEMP%" /s /m *.* /c "cmd /c Del @path" /d -60
Exe2bin
Introduction
modifierExecutable to Binary
Cet utilitaire permet de convertir des fichiers exécutables au format binaire.
Syntaxe
modifierEXE2BIN [lecteur1:][chemin1]fichier1.exe [[lecteur2:][chemin2]fichier2.bin]
fichier1.exe
- Nom du fichier exécutable à convertir.
fichier2.bin
- Nom du fichier binaire à créer. S'il n'est pas spécifié, le fichier sera nommé selon le fichier à convertir.
Exemple
modifierEXE2BIN C:\Users\Public\exe1mple.exe C:\Users\Public\bin1aire.bin EXE2BIN C:\Users\Public\exe1mple.exe
Dans le second exemple, le fichier exe1mple.exe
sera converti en exe1mple.bin
.
Exit
Introduction
modifierCommande interne DOS, elle permet de sortir de l'interpréteur.
Utilisation
modifierEXIT [/B] [code_sortie]
Options
modifier/B
- Sort du fichier batch sans terminer cmd.exe.
code_sortie
- Code de sortie retourné (errorlevel).
Exemple
modifierexit 5
Expand
Paramètres
modifierLa commande expand prend différents paramètres :
Paramètre | Description |
---|---|
-r | Renomme des fichiers développés. |
<destination> | Spécifie l’emplacement où les fichiers sont développés. Si source correspond à plusieurs fichiers et si -r n’est pas spécifié, destination doit correspondre à un répertoire.
destination peut avoir pour valeur une lettre de lecteur suivie du signe deux-points, un nom de répertoire, un nom de fichier ou une combinaison d’un ou de plusieurs de ces éléments. |
-d | Affiche la liste des fichiers à l’emplacement source. Ne développe ou n’extrait pas les fichiers. |
Find
Introduction
modifierLa commande FIND permet de rechercher une chaîne de texte dans un ou plusieurs fichiers.
Syntaxe
modifierFIND [/V][/C][/N][/I][/OFF[LINE]] "chaîne" [[lecteur:][chemin]nom_de_fichier.ext[ ...]]
Chemin
modifier"chaîne"
- Spécifie la chaîne de texte à rechercher.
[lecteur:][chemin]nom_de_fichier.ext
- Spécifie un ou plusieurs fichiers pour la recherche (facultatif).
Sans chemin spécifié, FIND recherche la chaîne de texte saisie à l'invite ou redirigée depuis une autre commande.
Options
modifier/V
- Affiche toutes les lignes ne contenant pas la chaîne spécifiée.
/C
- Affiche seulement le nombre de lignes contenant la chaîne.
/N
- Affiche les numéros de ligne avec les lignes affichées.
/I
- Ignore la casse lors de la recherche de la chaîne.
/OFF[LINE]
- Ne pas ignorer les fichiers dont l'attribut "hors connexion" a été réglé.
Exemple
modifierFIND /I "batchfile" C:\Docs\fichier.txt
Findstr
Recherche de chaînes de caractères dans les fichiers.
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
[/F:fichier] [/C:chaîne] [/G:fichier] [/D:liste de répertoires] [/A:attributs de couleur] [chaînes] [[lecteur:][chemin]nom de fichier[ ...]]
/B Recherche l'élément s'il est en début de ligne. /E Recherche l'élément s'il est en fin de ligne. /L Recherche les chaînes littéralement. /R Recherche les chaînes en tant qu'expressions. /S Recherche les fichiers correspondants dans le répertoire actif et dans tous ses sous-répertoires. /I Spécifie que la recherche ne doit pas tenir compte de la casse. /X Affiche les lignes correspondant parfaitement. /V N'affiche que les lignes non correspondantes. /N Affiche le numéro de ligne devant chaque ligne correspondante. /M Affiche uniquement le nom des fichiers contenant des chaînes correspondantes. /O Affiche le décalage des caractères pour chaque ligne correspondante. /P Ignore les fichiers ne contenant pas de caractères affichables. /OFFLINE Ne pas ignorer les fichiers dont l'attribut hors connexion a été réglé. /A:attr Spécifie l'attribut de couleur avec 2 chiffres hexadécimaux. Entrez "color /?". /F:fichier Lit la liste des fichiers dans le fichier spécifié (/ pour la console). /C:chaîne Recherche la chaîne spécifiée littéralement. /G:fichier Obtient les chaînes à rechercher à partir du fichier spécifié (/ pour la console). /D:rép Recherche dans une liste de répertoires délimitée par des points-virgules. chaînes Chaînes à rechercher. [lecteur:][chemin]nom de fichier Spécifie les fichiers dans lesquels effectuer la recherche.
Utilisez des espaces pour séparer plusieurs chaînes à rechercher, sauf si l'argument est précédé de /C. Exemple : 'FINDSTR "bonne journée" x.y' recherche "bonne" ou "journée" dans le fichier x.y. 'FINDSTR /C:"bonne journée" x.y' recherche "bonne journée" dans le fichier x.y.
Petit guide des options usuelles :
. Caractère joker = tout caractère * Répétition : zéro occurrences ou plus du caractère ou de la classe précédents ^ Emplacement : début de ligne $ Emplacement : fin de ligne [classe] Classe de caractères : tout caractère du jeu [^class] Classe inverse : tout caractère n'appartenant pas au jeu [x-y] Limites : tout caractère dans les limites spécifiées \x Échappement : utilisation littérale du métacaractère x \<xyz Emplacement : début du mot xyz\> Emplacement : fin du mot
Pour obtenir des informations complètes sur les options usuelles FINDSTR, reportez-vous à la Référence des commandes en ligne.
For
Introduction
modifierCette commande permet de faire une boucle. Celle-ci peut répéter une liste de valeurs, les lignes d'un ou plusieurs fichiers, ou encore un ensemble de nombres entiers. Le type de boucle est choisi par le commutateur indiqué au FOR (aucun, /D, /R, /L ou /F).
La commande FOR utilise une ou plusieurs variables locales pour effectuer la boucle. Dans le cas d'une commande entrée directement sous DOS, il faut les utiliser avec un simple %
, alors que si la commande est utilisée dans un fichier batch .bat, il faudra l'utiliser avec %%
. Dans la suite, les descriptions d'utilisation utiliseront un simple %
, et les exemples, généralement destinés à être intégrés dans un fichier de commandes, auront les variables notées avec %%
Boucle sur des fichiers
modifierCes boucles s'utilisent pour appliquer une commande à plusieurs fichiers. Au lieu de copier plusieurs fois la même commande pour un fichier, le FOR permet de n'écrire cette commande qu'une seule fois. Ceci est surtout utile si la commande est complexe.
Utilisation
modifierFOR %variable IN (ensemble de fichiers) DO commande
Pour ce cas, le FOR s'utilise sans commutateur. Il est généralement utilisé pour boucler sur un ensemble de noms de fichier, d'autant qu'il est utilisé avec les expressions du type *.extension ou utilisant les caractères génériques '*' et '?' autrement. Il peut être utilisé avec de simples chaînes de caractères, mais ceci est déconseillé à cause de l'interprétation de certains caractères.
Exemples
modifierExemple sur de simples chaînes
modifierFOR %%i IN (chaine1 chaine2) do @ECHO %%i
Cet exemple est équivalent à l’exécution des commandes suivantes :
@ECHO chaine1 @ECHO chaine2
Exemple sur un ensemble de fichiers sans caractère générique
modifierFOR %%i IN (fichier1.txt fichier2.txt) do @TYPE %%i
Cet exemple est équivalent à l’exécution des commandes suivantes :
@TYPE fichier1.txt @TYPE fichier2.txt
Exemple sur un ensemble de fichiers utilisant les caractères génériques
modifierFOR %%i IN (*.txt) do @TYPE "%%i"
En supposant que le répertoire courant contienne les fichiers fich1.txt, fich2.txt et fich3.txt, cet exemple est équivalent à l’exécution des commandes suivantes :
@TYPE "fich1.txt" @TYPE "fich2.txt" @TYPE "fich3.txt"
Variante :
FOR %%i IN (*.txt *.doc install.log) do @TYPE "%%i"
En supposant que le répertoire courant contienne les fichiers fich1.txt, fich2.txt, fich3.txt, readme.doc, lisezmoi.doc, cet exemple est équivalent à l’exécution des commandes suivantes :
@TYPE "fich1.txt" @TYPE "fich2.txt" @TYPE "fich3.txt" @TYPE "readme.doc" @TYPE "lisezmoi.doc" @TYPE "install.log"
Boucle de répétition de commandes
modifierCes boucles s'utilisent pour exécuter une commande plusieurs fois, au lieu de faire beaucoup de copies de la commande, la boucle FOR permet de n'écrire cette commande qu'une fois. ceci est surtout utile si le nombre de répétition est grand.
Utilisation
modifierLe commutateur /L permet de faire une boucle FOR classique, c'est-à-dire qu'elle permet de boucler sur des commandes un certain nombre de fois.
FOR /L %variable IN (index de début, pas, index de fin) DO commande
La première boucle mettra dans variable la valeur index de début, puis, à chaque boucle, la valeur affectée à variable sera incrémentée de la valeur pas. Enfin, lorsque la valeur affectée à variable dépasse la valeur index de fin, la boucle s'arrête.
Exemple
modifierFOR /L %i IN (1,2,10) DO @ECHO Message %i
Ici, la variable %i commence à 1, augmentera de 2 à chaque boucle. La boucle se terminera lorsque %i vaudra plus de 10 (c'est-à-dire que %i = 9 sera la dernière boucle). Cet exemple est donc équivalent à l’exécution des commandes suivantes :
Message 1 Message 3 Message 5 Message 7 Message 9
Boucle sur des répertoires
modifierLe principe est le même que pour les boucles sur des fichiers, mais s'applique sur les répertoires lorsque l'ensemble est une chaine contenant des caractères génériques.
Utilisation
modifierLe commutateur /D permet de rechercher des répertoires au lieu de fichiers.
FOR /D %variable IN (ensemble de répertoires) DO commande
Exemples
modifierExemple sur un ensemble de répertoires sans interprétation
modifierFOR /D %i IN (repertoire1 repertoire2) do ECHO %%i
Cet exemple est équivalent à l'exécution des commandes suivantes :
ECHO repertoire1 ECHO repertoire2
Cet exemple est aussi équivalent à l'exécution des commandes suivantes :
FOR %i IN (repertoire1 repertoire2) do ECHO %i
En effet, ici, aucune interprétation d'expression n'est effectuée, c'est comme si la boucle s'effectuait sur des fichiers ou des chaînes de caractères.
Exemple sur un ensemble de répertoires utilisant des caractères génériques
modifierFOR /D %i IN (Doc*) do DIR "%i"
Si le répertoire courant contient les répertoires Documents and Settings et Docs, cet exemple est équivalent à l'exécution des commandes suivantes :
DIR "Documents and Settings" DIR "Docs"
Boucle récursive sur des fichiers ou des répertoires
modifierLe principe est le même que les boucles sur des répertoires ou fichiers, mais les recherches se poursuivent dans les sous-répertoires lorsque l'ensemble contient des caractères génériques.
Utilisation
modifierL'ajout du commutateur /R permet de faire cette boucle récursive sur les sous-répertoires.
FOR /R [/D] %variable IN (ensemble de répertoires) DO commande
Si le commutateur /R est le seul présent, la recherche récursive s'effectuera sur des noms de fichiers.
Si les commutateur /R et /D sont présents, la recherche récursive s'effectuera sur des noms de répertoires.
Exemples
modifierExemple sur un ensemble de répertoires sans caractère générique
modifierComme dans le paragraphe précédent, sans caractère générique le commutateur /R est inutile.
Exemple sur un ensemble de répertoires utilisant des caractères génériques
modifierFOR /D /R %%i IN (Doc*) do DIR "%%i"
Si le répertoire courant contient les répertoires Documents and Settings et Docs, ainsi que temp contenant le sous-répertoire Documentation, alors cet exemple est équivalent à l'exécution des commandes suivantes :
DIR "C:\Documents and Settings" DIR "C:\Docs" DIR "C:\temp\Documentation"
Exemple sur un ensemble de fichiers utilisant des caractères génériques
modifierFOR /R %%i IN (Doc*) do ECHO "%%i"
équivalent possible à l'exécution des commandes suivantes :
ECHO "C:\document.txt" ECHO "C:\doc.odf" ...
Boucle sur le contenu d'un fichier
modifierCes boucles s'utilisent pour appliquer une commande à plusieurs lignes d'un fichier. Contrairement aux autres boucles FOR qui se contentent de noms de fichiers, ces boucles ouvrent tous les fichiers indiqués, et les lisent ligne par ligne. À chaque itération de boucle correspond une ligne d'un fichier.
Utilisation
modifierLe commutateur /F permet d'effectuer une boucle sur le contenu de fichiers.
FOR /F ["options"] %variable IN (ensemble de fichiers) DO commande
Avec ce commutateur on peut mettre des options qui vont indiquer comment découper le ou les fichiers, pour savoir quelles parties seront retenues pour l'exécution de la commande. Cela permet, par exemple, le découpage mot par mot.
Il faut bien garder à l'esprit que toutes les options définies ci-après se feront sur une ligne donnée d'un fichier, et sont cumulatives.
Découpage de mots ou blocs
modifierPour un découpage poussé, il faut indiquer le ou les caractères qui délimitent les zones. Par exemple, pour les mots, ce seront les caractères espace, mais on peut également découper selon plusieurs caractères différents.
"delims=ensemble de caractères"
Pour les mots séparés par des espaces, il suffira d'ajouter l'option :
"delims= "
Par défaut, les caractères espace et tabulation servent de séparateur.
Exclusion de fin de ligne
modifierPour découper et ne pas prendre en compte tout ce qui se situe à droite d'un caractère, il existe l'option suivante (end of line) :
"eol=caractère"
Par exemple, si le caractère #
est un caractère de début de commentaire, et si l'on ne veut pas lire les commentaires, il suffit d'ajouter l'option :
"eol=#"
Exclusion des premières lignes
modifierCertains fichiers peuvent contenir des entêtes inexploitables. Il est possible de les supprimer en indiquant le nombre de lignes à exclure lors de la lecture ligne par ligne du fichier. Cette option est globale au fichier, ce n'est pas un traitement de ligne.
"skip=nombre de lignes"
Par exemple, pour exclure systématiquement les quatre premières lignes des fichiers, il suffit d'ajouter :
"skip=4"
Découpe dans les variables
modifierLa commande FOR ne prend qu'un seul nom de variable. Or, pour chaque ligne, il est possible de faire un découpage, mais un système est mis en place pour permettre de remplir plusieurs variables. Pour l'utiliser, il faut remplir l'option suivante :
"tokens=nombres séparés par virgules[*]"
Par exemple, pour un découpage par mots, pour traiter, le premier et le deuxième mots, il faudra utiliser l'option :
"tokens=1,2"
Pour récupérer le reste de la ligne (sans séparer les mots), il suffit d'ajouter le caractère *
:
"tokens=1,2*"
Dans la commande, pour utiliser ces différentes zones, il faut utiliser le nom de la variable avec un seul caractère, et de nouvelles variables seront automatiquement créées avec les zones suivantes en incrémentant alphabétiquement le nom de la précédente. Par exemple, si la commande FOR est déclarée avec la variable %%i, la première zone sera mémorisée dans %%i, la deuxième dans %%j, la troisième dans %%k (et ainsi de suite si d'autres zones sont définies). Utiliser la commande FOR en passant le nom de variable %%a permet d'avoir une marge généralement suffisante (26 caractères).
Exemple 1
modifierSoit un fichier monFich.txt contient les deux lignes suivantes :
sfqsdf1, zarzera2, xvwcvw3, vcnvbn4, rtyutr5, fdgh6 ssfgqsfdf1, zaerera2, zrezw3, veeenvbn4 ; ppppppp
Un commande FOR lisant ce fichier pourrait être :
FOR /F "eol=; tokens=2,3* delims=, " %%a IN (monfich.txt) DO @ECHO %%a %%b %%c
Dans cet exemple, le fichier monFich.txt va être lu ligne par ligne, aucune ligne de début n'est exclue. Les lignes contenant un caractère ;
ne seront lues que partiellement : du début jusqu'à ce caractère exclu. Chaque ligne sera découpée en zones selon les caractères virgule (,
) et espace. La zone 2 sera mémorisée dans %%a, la zone 3 dans %%b, et toutes les zones suivantes dans %%c
L'exécution de cette commande est donc équivalente à :
@ECHO zarzera2 xvwcvw3 vcnvbn4, rtyutr5, fdgh6 @ECHO zaerera2 zrezw3 veeenvbn4
Exemple 2
modifierFOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
Cet exemple énumère les noms de variables d'environnement de l'environnement en cours.
Boucle sur le retour d'une commande
modifierOn pourrait lire de la même façon les lignes de retour d'une commande en redirigeant la sortie d'affichage sur un fichier via l'opérateur commande > fichier
, mais la commande FOR permet de lire directement le retour d'une commande sans passer par un fichier.
Le principe est le même que les boucles sur les contenus de fichiers, y compris pour les options, seul l'ensemble donné change.
Utilisation
modifierFOR /F %%i IN (` commande `) do commande
À la place de l'ensemble de fichiers, il suffit de mettre une commande entre quotes inversées. Les opérations s'effectueront alors sur les lignes du retour d'affichage (qui n'est donc plus affiché).
Exemple
modifierL'exemple suivant permet de rechercher tous les fichiers .txt et compte le nombre de fichiers trouvés. Pour cela, la commande DIR /B *.txt
liste tous les fichiers .txt sans information supplémentaire. Ainsi, il suffit de compter le nombre de lignes normalement affichées en utilisant un simple compteur.
@ECHO off SET /A count=0 FOR /F %%A IN ('DIR /B *.txt 2^>NUL') DO SET /A count+=1 IF %count% GTR 1 ( ECHO Trouvé %count% fois ! ) ELSE ( ECHO Aucun fichier trouvé )
Boucle avec plusieurs commandes
modifierDans tous les exemples précédents, une seule commande était exécutée, mais la commande FOR offre la possibilité d'exécuter, pour chaque itération, une succession d'instructions écrite sur plusieurs lignes via des parenthèses. Ceci fonctionne pour tous les cas précédemment définis.
Utilisation
modifierFOR commutateurs, options et variable IN (ensemble) DO ( Commande ... Commande )
La parenthèse ouvrante doit se situer sur la même ligne que le FOR pour être valide.
Exemple
modifierL'exemple suivant permet de rechercher tous les fichiers .txt contenant la chaîne de caractères toto
. La commande FIND /C "toto" *.txt
est utilisée pour faire la recherche. Cette commande retourne :
--------- nom du fichier lu: nombre d’occurrences trouvées
Même si la chaîne de caractères n'est pas trouvée, FIND retourne une ligne avec 0 pour le nombre d’occurrences (voir DOS/Find). L'exemple suivant traite donc, chaque ligne retournée par le FIND afin de récupérer le nom des fichiers trouvés.
@ECHO OFF FOR /F "tokens=1,2* delims=: " %%A IN ('FIND /C "VAR" *.txt') DO ( IF %%C GTR 0 ( ECHO Fichier: %%B ECHO Nombre d’occurrences : %%C ) )
Le nombre d’occurrences est mis dans %%C, c'est pourquoi cet exemple teste si %%C est strictement supérieur à 0 (pour n'afficher que les fichiers trouvés).
Noter que la casse est importante dans les boucles DOS FOR. En effet, %%C est différent de %%c. Ce qui surprend contrairement à shell bash par exemple où l'on l'habitude de ce comportement. Il y a donc 52 variables globales disponibles.
Format
Description
modifierFORMAT est une commande externe qui permet de formater un disque dur, une disquette.
Utilisation
modifierFORMAT lecteur [options]
Options:
/Q
- Formatage rapide.
/V:nom
- Nom de volume attribué au disque.
/FS:sys_fich
- Système de fichiers (exemples: FAT, FAT32, exFAT, NTFS ou UDF).
Exemple:
format c:
Le formatage d'un disque l'initialise, et supprime les éventuelles données existantes.
Goto
Introduction
modifierCommande interne DOS, elle est utilisée dans un batch pour poursuivre l'exécution au label spécifié.
Utilisation
modifierGOTO label
Exemple
modifierGOTO plusloin ECHO Instruction sautée :plusloin ECHO Instruction interprétée
Terminer un batch ou une sous-routine
modifierPour sortir du batch ou d'une sous-routine, le label spécial :eof
peut être utilisé :
ECHO Instruction interprétée GOTO :eof ECHO Instruction 1 sautée ECHO Instruction 2 sautée
Help
Introduction
modifierLa commande HELP permet d'obtenir l'aide des commandes DOS
Utilisation
modifierHELP
Donne la liste des commandes avec leur résumé
HELP commande
Donne une aide précise sur une commande particulière. Cela revient parfois à faire:
commande /?
Exemples
modifierHELP cmd HELP SET HELP IF HELP FOR
Hostname
Affiche le nom de l'ordinateur.
If
Introduction
modifierCommande interne DOS, elle est utilisée pour exécuter une commande si une condition est vraie.
Utilisation
modifierIF condition commande
commande n'est exécutée que si condition est vraie.
IF condition commande_vrai ELSE commande_faux
La commande commande_vrai n'est exécutée que si condition est vraie. Sinon, la commande commande_faux est exécutée.
Plusieurs commandes
modifierIF condition ( commandes )
Les commandes ne sont exécutées que si condition est vraie.
IF condition ( commandes_vrai ) ELSE ( commandes_faux )
Les commandes commandes_vrai ne sont exécutées que si condition est vraie. Sinon, les commandes commandes_faux sont exécutées.
Exemples
modifierIF "%1" == "" ( echo syntaxe : fichier_texte fichier_binaire exit )
IF "%1" == "toto" ( echo le parametre est bien toto exit )
Condition
modifierLa commande IF supporte différents types de condition.
Tester le code de retour
modifierToute application ou commande retourne un entier, valant 0 quand tout s'est bien passé, et différent de zéro sinon.
IF ERRORLEVEL n commande
Cette syntaxe teste si la commande précédente a retourné un code supérieur ou égal à n
.
Exemple:
IF ERRORLEVEL 1 echo Erreur
IF NOT ERRORLEVEL n commande
Cette syntaxe teste si la commande précédente a retourné un code strictement inférieur à n
.
Exemple:
IF NOT ERRORLEVEL 1 echo OK
Tester l'existence d'un fichier
modifierIF EXIST nom_fichier commande
La commande est exécutée si le fichier existe.
IF NOT EXIST nom_fichier commande
La commande est exécutée si le fichier n'existe pas.
Comparer deux chaînes de caractères
modifierIF chaine1==chaine2 commande IF NOT chaine1==chaine2 commande
IF [/I] chaine1 op chaine2 commande
L'option /I
permet d'ignorer la casse (A=a).
op peut valoir :
EQU
: égal àNEQ
: différent deLSS
: inférieur àLEQ
: inférieur ou égal àGTR
: supérieur àGEQ
: supérieur ou égal à
La comparaison de chaîne est lexicographique. Si les deux chaînes ne sont composées que de chiffres, une comparaison numérique est effectuée.
La variable d'environnement %ERRORLEVEL%
contient le code de retour de la dernière commande, et peut être testée avec cette syntaxe.
Tester une variable d'environnement
modifierIF DEFINED variable commande
Teste si la variable indiquée existe.
Ipconfig
Affiche les paramètres/détails des connexions réseau actives (en environnement Windows).
Exemples
modifierVoir toutes les informations réseaux (adresses IP, DNS, etc.) :
ipconfig /all
Flusher le cache DNS :
ipconfig /flushdns
Label
Introduction
modifierUn label est un point d'exécution dans un batch, utilisé par la commande goto.
On peut également l'utiliser comme commentaire, car les labels sont ignorés, à moins qu'une commande goto correspondante soit utilisée.
Utilisation
modifier:label
Exemple
modifierGOTO plusloin ECHO Instruction sautée :plusloin ECHO Instruction interprétée
Mkdir
Introduction
modifierMake Directory
Commande interne DOS, elle permet de créer un nouveau répertoire.
Utilisation
modifierMKDIR chemin MD chemin
chemin désigne le chemin incluant le nom du nouveau répertoire.
Options
modifierCette commande ne possède aucune option.
Exemples
modifiermkdir c:\program\application1 md data_cache
Mkdir
Introduction
modifierMake Directory
Commande interne DOS, elle permet de créer un nouveau répertoire.
Utilisation
modifierMKDIR chemin MD chemin
chemin désigne le chemin incluant le nom du nouveau répertoire.
Options
modifierCette commande ne possède aucune option.
Exemples
modifiermkdir c:\program\application1 md data_cache
Mklink
MKLINK est une commande DOS qui crée un raccourci NTFS. Ce raccourci redirige de façon transparente les accès des logiciels ainsi que du système au dossier, sous-dossier et fichier sans que le chemin d'accès soit altéré.
Ex :
C:\Maison est un raccourci qui mène vers D:\Terre C:\Maison\Soleil est donc égal à D:\Terre\Soleil mais le logiciel ne le sait pas.
Il est surtout utilisé afin de déplacer le répertoire de profil d'un utilisateur sans avoir à reconfigurer le système.
Voici comment déplacer le profil d'un utilisateur spécifique sous Windows 7.
- Si ce n'est pas déjà fait, il faut activer le compte administrateur. Pour ce faire, il faut se rendre dans la liste des utilisateurs dans le panneau de configuration ou dans le module de gestion de l'ordinateur. Il n'est pas obligatoire de se servir de ce compte mais il ne faut pas oublier que l'utilisateur dont le dossier doit être déplacé ne peut pas être utilisé et ce même s'il est administrateur car le profil ne peut être déplacé s'il est en cours d'utilisation.
- Se connecter avec l'utilisateur administrateur.
- Déplacer le répertoire du profil de l'utilisateur à l'endroit voulu.
- Une fois le répertoire déplacé, il est très important de s'assurer que les autorisations NTFS sont correctes. Il faut donc s'assurer que le répertoire ainsi que tous les répertoires parents jusqu'à la racine du volume dans lequel il se retrouve soient vérifiés. L'utilisateur SYSTEM doit avoir accès complet ainsi que le groupe Users (Utilisateurs). Par contre, le répertoire du profil doit être configuré pour ne pas hériter des autorisations NFTS car le groupe Users (Utilisateurs) ne doit pas y être et l'usager concerné doit avoir un accès complet.
- Créer le raccourci avec la commande MKLINK. Si l'utilisateur est Paul et que son dossier a été déplacé de C:\Users\Paul à D:\Paul, voici la commande: MKLINK /D C:\Users\Paul D:\Paul Le raccourcis C:\Users\Paul va apparaître.
- S'assurer que le raccourci lui-même a les mêmes droits NTFS que le dossier réel. Cela évite l'apparition des cadenas sur les sous-dossiers de l'utilisateur.
Voilà ! Il ne reste plus qu'à se reconnecter avec l'usager et si tout va bien la connexion se passe comme d'habitude. Sinon, un profil temporaire est utilisé.
Move
Introduction
modifierMove
Cette commande permet de déplacer des fichiers et renommer des répertoires.
Utilisation
modifierPour déplacer un ou plusieurs fichiers :
MOVE [/Y | /-Y] [lecteur:][chemin]fichier1[,...] destination
Pour renommer un répertoire:
MOVE [/Y | /-Y] [lecteur:][chemin]répertoire1 répertoire2
Paramètres
modifier[lecteur:][chemin]fichier1
- Spécifie l'emplacement et le nom du ou des fichiers que vous voulez déplacer.
destination
- Spécifie le nouvel emplacement du fichier. Destination peut être une lettre de lecteur et deux-points (:), un nom de répertoire, ou une combinaison. Si vous déplacez un seul fichier, vous pouvez aussi inclure un nom de fichier si vous voulez renommer le fichier en le déplaçant.
[lecteur:][chemin]répertoire1
- Spécifie le répertoire que vous voulez renommer.
répertoire2
- Spécifie le nouveau nom du répertoire.
/Y
- Supprime la demande de confirmation de remplacement de fichiers de destination existants.
/-Y
- Provoque la demande de confirmation de remplacement de fichiers de destination existants.
L'option /Y
peut être présente dans la variable d'environnement COPYCMD
. Outrepassez ceci en utilisant /-Y
dans la ligne de commandes. Par défaut, une demande de confirmation apparaît sauf si la commande MOVE
est exécutée depuis un script de commandes.
Net
Commandes
modifierObtenir de l'aide sur les commandes NET faire simplement :
NET HELP commande
ou :
NET commande /HELP
ou encore pour affiche l'aide écran par écran :
NET HELP commande | MORE
Les commandes disponibles sont :
- NET ACCOUNTS
- NET COMPUTER
- NET CONFIG
- NET CONFIG SERVER
- NET CONFIG WORKSTATION
- NET CONTINUE
- NET FILE
- NET GROUP
- NET HELP
- NET HELPMSG
- NET LOCALGROUP
- NET NAME
- NET PAUSE
- NET PRINT
- NET SEND
- NET SESSION
- NET SHARE
- NET START
- NET STATISTICS
- NET STOP
- NET TIME
- NET USE
- NET USER
- NET VIEW
Net send
modifiernet send envoie des messages sur le LAN. Ex :
net send 192.168.1.10 \"coucou\"
Net start
modifierPermet de lancer un service. Ex :
net start apache2
Net statistics
modifierAffiche des stats soit sur un serveur, soit un client. Ex :
net statistics server
Uptime :
net statistics workstation | findstr "since"
Net stop
modifierContraire de "net start". Ex :
net stop apache2
Net use
modifiernet use monte un lecteur réseau. Ex :
net use Z: \\192.168.1.10\c$ /persistent:yes /user:MonCompte MonMotDePasse
NB : il est déconseillé de laisser le mot de passe en clair dans un script.
Pour démonter le lecteur :
net use Z: /delete
Problèmes connus
modifierSi le lecteur ne monte pas avec : L'erreur système 1219 s'est produite. Plusieurs connexions à un serveur ou à une ressource partagée par le même utilisateur, en utilisant plus d'un nom utilisateur, ne sont pas autorisées. Supprimez toutes les connexions précédentes au serveur ou à la ressource partagée et recommencez.
Alors c'est probablement le partage du dossier cible ou de son parent qu'il faut revoir.
Netsh
netsh est un utilitaire de configuration réseau.
Exemples
modifierObtenir le mot de passe wifi
modifiernetsh wlan show profile SSID key=clear
Nslookup
Introduction
modifierName Server lookup
Cette commande permet d'interroger un serveur de nom pour :
- résoudre un nom de domaine en une ou plusieurs adresses IP,
- trouvez le nom de domaine associé à une adresse IP,
- obtenir le serveur de mail pour un domaine particulier,
- ...
Utilisation
modifier- mode interactif utilisant le serveur par défaut :
nslookup [-option ...]
- mode interactif utilisant un serveur particulier :
nslookup [-option ...] - serveur
- recherche hôte en utilisant le serveur par défaut :
nslookup [-option ...] hôte
- recherche hôte en utilisant un serveur particulier :
nslookup [-option ...] hôte serveur
Options
modifierLes options peuvent être spécifiées sur la ligne de commande, par exemple :
nslookup -type=PTR
Ou en mode interactif avec la commande set :
set type=PTR
Pathping
La commande PathPing
est un utilitaire réseau de ligne de commande fourni dans Windows 2000 et au-delà qui combine la fonctionnalité de ping avec celle de tracert.
Il est utilisé pour localiser les points présentant une latence et une perte de réseau.
Aperçu
modifierLa commande fournit des détails sur le chemin entre deux hôtes et des statistiques de type ping pour chaque nœud du chemin en fonction d'échantillons prélevés sur une période donnée, en fonction du nombre de nœuds entre l'hôte de début et de fin.
Les avantages de PathPing
par rapport à ping
et traceroute
sont que chaque nœud reçoit un ping à la suite d'une seule commande et que le comportement des nœuds est étudié sur une période de temps prolongée, plutôt que l'échantillon de ping par défaut de quatre messages ou la trace de route unique par défaut traceroute.
L'inconvénient est qu'il faut au total 25 secondes par saut pour afficher les statistiques de ping.
Syntaxe
modifierLa syntaxe de commande est :
pathping [-g liste-hôtes] [-h magasins_maximum] [-i adresse] [-n] [-p période] [-q num_queries] [-w délai d'attente] [-P] [-R] [-T] [-4] [-6] nom_cible
Options :
-g host-list
Route source libre parmi la liste des hôtes.-h maximum_hops
Nombre maximum de sauts pour rechercher la cible.-i address
Utiliser l'adresse source spécifiée.-n
Ne pas résoudre les adresses à des noms d'hôte.-p period
Délai d'attente en millisecondes entre les pings.-q num_queries
Nombre de requêtes par saut.-w timeout
Délai d'attente en millisecondes pour chaque réponse.-P
Testez la connectivité RSVP PATH.-R
Testez si chaque saut est compatible RSVP.-T
Testez la connectivité à chaque saut avec des étiquettes de priorité de couche 2.-4
Forcer l'utilisation d'IPv4.-6
Forcer l'utilisation d'IPv6.
Échantillon
modifier> pathping wikipedia.org Tracé de l'itinéraire vers wikipedia.com [207.142.131.235] sur un maximum de 30 sauts: 0 simonslaptop [192.168.0.11] 1 192.168.0.1 2 ainsi1-hg2.ilford.broadband.bt.net [217.32.64.73] 3 217.32.64.34 4 217.32.64.110 5 anchor-border-1-4-0-2-191.router.demon.net [212.240.162.126] 6 anchor-core-2-g0-0-1.router.demon.net [194.70. 98.29] 7 ny1-border-1-a1-0-s2.router.demon.net [194.70.97.66] 8 ge-8-0-153.ipcolo1.NewYork1.Level3.net [209.246.123.177] 9 ae-0 -51.bbr1.NewYork1.Level3.net [64.159.17.1] 10 so-2-0-0.mp1.Tampa1.Level3.net [209.247.11.201] 11 ge-6-0.hsa2.Tampa1.Level3.net [64.159.1.10] 12 unknown.Level3.net [63.208.24.2] 13 Calcul des statistiques pendant 325 secondes ... Source ici Ce nœud / lien saut RTT perdu / envoyé = Pct perdu / envoyé = Pct Adresse 0 simonslaptop [192.168.0.11] 0/100 = 0% | 1 0 ms 0/100 = 0% 0/100 = 0% 192.168.0.1 0/100 = 0% | 2 18ms 1/100 = 1% 1/100 = 1% donc1-hg2.ilford.broadband.bt.net [217.32.64.73] 0/100 = 0% | 3 18 ms 0/100 = 0% 0/100 = 0% 217.32.64.34 0/100 = 0% | 4 21 ms 0/100 = 0% 0/100 = 0% 217.32.64.110 0/100 = 0% | 5 21 ms 1/100 = 1% 1/100 = 1% ancre-border-1-4-0-2-191.router.demon.net [212.240.162.126] 0/100 = 0% | 6 --- 100/100 = 100% 100/100 = 100% ancre-core-2-g0-0-1.router.demon.net [194.70.98.29] 0/100 = 0% | 7 --- 100/100 = 100% 100/100 = 100% ny1-border-1-a1-0-s2.router.demon.net [194.70.97.66] 0/100 = 0% | 8 100 ms 0/100 = 0% 0/100 = 0% ge-8-0-153.ipcolo1.NewYork1.Level3.net [209.246.123.177] 0/100 = 0% | 9 94 ms 0/100 = 0% 0/100 = 0% ae-0-51.bbr1.NewYork1.Level3.net [64.159.17.1] 0/100 = 0% | 10 134 ms 1/100 = 1% 1/100 = 1% donc-2-0-0.mp1.Tampa1.Level3.net [209.247.11.201] 0/100 = 0% | 11 137 ms 0/100 = 0% 0/100 = 0% ge-6-0.hsa2.Tampa1.Level3.net [64.159.1.10] 0/100 = 0% | 12 131 ms 0/100 = 0% 0/100 = 0% inconnu.Level3.net [63.208.24.2] 100/100 = 100% | 13 --- 100/100 = 100% 0/100 = 0% win2000 [0.0.0.0] Trace complete.
> pathping wikipedia.org -q 10 Suivi de l'itinéraire vers wikipedia.org [66.230.200.100] sur un maximum de 30 sauts: 0 Aaron.hsd1.mn.comcast.net. [192.168.11.3] 1 air.setup [192.168.11.1] 2 73.127.68.1 3 ge-1-38-ur01.minnetonka.mn.minn.comcast.net [68.86.234.41] 4 68.86.232.37 5 68.86.232.33 6 * 68.86.232.5 7 68.86.232.1 8 12.116.99.41 9 tbr2.cgcil.ip.att.net [12.122.99.70] 10 * ggr2.cgcil.ip.att.net [12.123.6.69] 11 ar1-a3120s2.wswdc.ip.att.net [192.205.34.6] 12 66.192.247.163 13 ge8-13.csw5-pmtpa.wikimedia.org [66.193.50.242] 14 * rr.pmtpa.wikimedia.org [66.230.200.100] Calcul des statistiques pendant 35 secondes ... Source vers ici ce nœud / lien Hop RTT perdu / envoyé = Pct perdu / envoyé = Pct Adresse 0 Aaron.hsd1.mn.comcast.net. [192.168.11.3] 0/ 10 = 0% | 1 0 ms 0/10 = 0% 0/10 = 0% air.setup [192.168.11.1] 0/ 10 = 0% | 2 8 ms 0/10 = 0% 0/10 = 0% 73.127.68.1 0/ 10 = 0% | 3 8 ms 0/10 = 0% 0/10 = 0% ge-1-38-ur01.minnetonka.mn.minn.comcast.net [68.86.234.41] 0/ 10 = 0% | 4 9 ms 0/10 = 0% 0/10 = 0% 68.86.232.37 0/ 10 = 0% | 5 8 ms 0/10 = 0% 0/10 = 0% 68.86.232.33 0/ 10 = 0% | 6 12 ms 0/10 = 0% 0/10 = 0% 68.86.232.5 0/ 10 = 0% | 7 8 ms 0/10 = 0% 0/10 = 0% 68.86.232.1 0/ 10 = 0% | 8 20 ms 0/10 = 0% 0/10 = 0% 12.116.99.41 0/ 10 = 0% | 9 --- 10/ 10 =100% 10/ 10 =100% tbr2.cgcil.ip.att.net [12.122.99.70] 0/ 10 = 0% | 10 --- 10/ 10 =100% 10/ 10 =100% ggr2.cgcil.ip.att.net [12.123.6.69] 0/ 10 = 0% | 11 --- 10/ 10 =100% 10/ 10 =100% ar1-a3120s2.wswdc.ip.att.net [192.205.34.6] 0/ 10 = 0% | 12 --- 10/ 10 =100% 10/ 10 =100% 66.192.247.163 0/ 10 = 0% | 13 63 ms 0/10 = 0% 0/10 = 0% ge8-13.csw5-pmtpa.wikimedia.org [66.193.50.242] 0/ 10 = 0% | 14 63 ms 0/10 = 0% 0/10 = 0% rr.pmtpa.wikimedia.org [66.230.200.100] Trace complete.
> pathping wikipedia.org -n Tracé de l'itinéraire vers wikipedia-lb.eqiad.wikimedia.org [208.80.154.225] sur un maximum de 30 sauts: 0 192.168.1.102 1 192.168.1.1 2 10.202.181.110 3 10.202.182.109 4 10.202.181.153 5 10.202.181.49 6212.72 .4.97 7 82.178.32.102 8 63.218.109.117 9 63.218.44.38 10 206.111.0.249 11 216.156.8.189 12 * * * Calcul des statistiques pendant 275 secondes ...
Pause
Introduction
modifierCommande interne DOS, elle permet d'interrompre l'exécution d'un programme.
Une invite apparaît sur la sortie (par exemple, Appuyer sur une touche pour continuer...). En appuyant sur une touche, le programme se poursuit.
Utilisation
modifierPAUSE
Exemple
modifierpause
Popd
Introduction
modifierPop Directory
Commande interne DOS, elle permet de retourner au répertoire courant précédent la dernière commande pushd.
Utilisation
modifierPOPD
Exemple
modifierREM C:\ PUSHD C:\Windows REM C:\Windows PUSHD E:\temp REM E:\Temp POPD REM C:\Windows POPD REM C:\
Voir
modifier
Prompt
Change le prompt, c'est-à-dire ce qu'il y a avant le curseur de la console.
Exemple
modifierC:\Users\mon_login> prompt \ \ prompt # #
Pushd
Introduction
modifierPush Directory
Commande interne DOS, elle permet de modifier le répertoire courant en mémorisant les répertoires courants précédents.
Utilisation
modifierPUSHD chemin
Exemple
modifierREM C:\ PUSHD C:\Windows REM C:\Windows PUSHD E:\temp REM E:\Temp POPD REM C:\Windows POPD REM C:\
Voir
modifier
Rmdir
Introduction
modifierRemove Directory
Commande interne DOS, elle permet de supprimer un répertoire vide.
Utilisation
modifierRMDIR options chemin RD options chemin du repertoire
Le chemin désigne le répertoire à supprimer.
Options
modifier/S
- Supprime tous les sous-répertoires et fichiers également.
/Q
- Pas de confirmation avant la suppression si l'option /S est utilisée.
Exemples
modifierrmdir /S /Q c:\temp rd c:\data\cache
Rem
Introduction
modifierRemark
Commande interne DOS, elle permet d'ignorer le commentaire qui suit.
Utilisation
modifierREM commentaire
Exemples
modifierREM REM Commentaire utile dans un batch
Pour ne pas afficher les lignes commentées dans la console, utiliser :
@Echo off
Replace
Rôle
modifierCopie et déplace des fichiers sélectionnés.
Syntaxe
modifierreplace (unité1:)(chemin1)(fichier) (unité2:)(chemin2) (/a)(/p)(/r)(/w)
replace (unité1:)(chemin1)(fichier) (unité2:)(chemin2) (/p)(/r)(/s)(/w)(/u)
Paramètres
modifier(unité1:)(chemin1)(fichier)
Précise le nom et l'emplacement du fichier ou du groupe de fichier source.
(unité2:)(chemin2)
Précise l'emplacement du fichier cible. Vous ne pouvez pas spécifier le nom des fichiers de remplacement. Si vous ne précisez ni une unité ni un répertoire, replace utilise l'unité et le répertoire en cours en tant que cible.
Commutateurs
modifier- /a Ajoute de nouveaux fichiers au répertoire cible au lieu de remplacer des fichiers existants. Ce commutateur ne peut pas être utilisé avec les commutateurs /s et /u
- /p Sollicite une confirmation de votre part avant de remplacer un fichier cible ou avant d'ajouter un fichier source.
- /r Remplace les fichiers lecture seule ainsi que les fichiers non protégés. Si vous ne précisez pas ce commutateur. Toute tentative de remplacement d'un fichier lecture seule est traitée comme une erreur et le processus de remplacement est arrêté.
- /s Cherche dans tous les sous répertoires du répertoire cible et remplace les fichiers qui correspondent. Ce commutateur ne peut pas être utilisé avec le commutateur /a. La commande replace ne recherche pas dans les sous-répertoire précisés dans chemin1.
- /w Attend que vous placiez un disque dans l'unité avant de commencer à rechercher les fichiers sources. Si vous ne précisez pas ce commutateur, replace commence à remplacer ou ajouter les fichiers immédiatement après que vous aurez appuyé sur la touche ENTREE.
- /u Remplace (met à jour) uniquement les fichiers du répertoire cible qui sont plus anciens que ceux du répertoire source. Ce commutateur ne peut pas être utilisé avec le commutateur /a
Remarques
modifierSi vous disposez d'un système à disquette et qu'il vous faut changer de disquette pendant une opération de remplacement, vous pouvez préciser le commutateur /w pour que la commande replace s'arrête et attende que vous changiez de disquette avant de procéder au remplacement.
Vous ne pouvez pas utiliser cette commande pour mettre à jour des fichiers cachés ou des fichiers systèmes.
Exemple
modifierreplace a:\essai.001 c:\ /s
Pour mettre à jour tous les fichiers intitulé essai.001 qui se trouve sur le disque dur C par une version plus récente qui se trouve sur une disquette dans le lecteur A.
Rmdir
Introduction
modifierRemove Directory
Commande interne DOS, elle permet de supprimer un répertoire vide.
Utilisation
modifierRMDIR options chemin RD options chemin du repertoire
Le chemin désigne le répertoire à supprimer.
Options
modifier/S
- Supprime tous les sous-répertoires et fichiers également.
/Q
- Pas de confirmation avant la suppression si l'option /S est utilisée.
Exemples
modifierrmdir /S /Q c:\temp rd c:\data\cache
Robocopy
Robocopy est un logiciel de synchronisation de données en local ou sur un partage distant uniquement utilisable dans l' environnement Windows
Développé par Microsoft
Très facile à utiliser . Il possède beaucoup d' options . Les seules obligatoires sont les dossiers source et destination
options robocopy :
/R répétition des tentatives si erreurs
/W temps d' attention entre chaque tentative de synchro
/mir copie miroir
/np pas de barre de progression
/LOG le script créé un log qui permet de visualiser ce qui s'est passé pendant la synchro
/E
Des dossiers de la source peuvent etre exclus de la synchro avec une option spécifique
exemple de syntaxe :
robocopy /R:1 /W:1 "dossier_source_local_ou_distant" "\\dossier_destination_local_ou_distant" /mir /np /LOG:c:\logs.txt /E
Une info intéressante est la fin des logs :
la colonne FAILED comporte uniquement des 0 s' il n' y a pas d' erreurs pendant la synchro
Total Copied Skipped Mismatch FAILED Extras
Dirs : 12001 12000 1 0 0 0
Files : 99618 99615 0 0 3 0
Bytes : 42.020 g 42.019 g 0 0 512.0 k 0
Times : 4:24:42 4:04:24 0:00:00 0:20:17
Speed : 3076608 Bytes/sec.
Speed : 176.044 MegaBytes/min.
Ended : Fri Dec 01 00:42:02 2017
Rsh
Permet de lancer des commandes distantes sur un serveur Unix Syntaxe : rsh nom d'hote (-l utilisateur) (-n) commande
Rsm
Cette commande permet d'effectuer la gestion des ressources média en utilisant unité de stockage amovible.
Runas
Pour lancer des commandes avec un autre compte que celui de la session courante.
Utilisation
modifierDémarrer, exécuter (touche Windows + R) :
runas /profile /env /user:nom_machine\nom_compte commande_à_lancer
Ne marche pas avec "localhost" au lieu du nom de la machine, il faut retirer ce dernier pour lancer sous un compte local.
Exemple
modifierrunas /profile /env /user:administrateur cmd
Sc
Sc.exe permet de gérer les services Windows (visibles dans démarrer, exécuter, services.msc)[1].
Utilisation
modifierCréation du service :
SC CREATE MonService binpath= "C:\Temp\MonBinaire.exe"
Changement du dossier où il est exécuté :
SC CONFIG MonService binPath= "C:\MonDossier\MonBinaire.exe"
Suppression du service :
SC DELETE MonService
Références
modifier
Set
Introduction
modifierLa commande SET permet d'afficher ou de modifier une variable d'environnement.
Il est à noter que toutes les versions de MSDOS ne supportent pas forcement les implémentations qui vont suivre. C'est surtout à partir de NT5 (W2000 XP W2003) que le CLI "Command Line Interpreter" commence vraiment à s'étoffer.
Utilisation
modifierAffichage de variables
modifierSET [nom de variable]
Si aucun nom de variable n'est indiqué, la commande affiche toutes les variables d'environnement avec leur contenu. Ceci est utile pour chercher une variable telle qu'un répertoire utilisateur.
Si un nom est indiqué, la commande liste toutes les variables commençant par ce nom
Affectation de variables
modifierLes variables sont très utiles dans un environnement de script ou batch (un programme).
Affectation de chaînes
modifierla commande SET permet d'affecter une valeur à une variable nommée. Exemple :
SET X=unechainedecaractère
la variable X vient d'être initialisée avec la valeur "unechainedecaractère".
Chaque instanciation de la console (on peut exécuter cmd.exe plusieurs fois simultanément sous Windows) possède son propre environnement (une zone mémoire) dans lequel sont stockées toutes les variables.
@echo off
cls
echo.
SET monnom=byby
echo monnom : %monnom%
rem permet d'initialiser et d'afficher la variable monnom sur la console à la valeur "byby".
SET monprenom=titi
echo monprenom : %monprenom% monnom : %monnom%
SET nomcomplet=%monprenom% %monnom%
echo nomcomplet : %nomcomplet%
rem voilà la concaténation de deux variables en une seule
pause
Contrairement à beaucoup d'autres langages de programmation, le signe égal de la déclaration ne peut pas être précédé ou suivi d'un espace.
Affectation d'expressions numériques
modifierLe commutateur /A permet d'évaluer des expressions numériques. Par exemple:
SET /A X=3+2
Ceci affecte 5
à la variable d'environnement X
. Si le commutateur n'était pas présent, X
aurait pris la chaine 3+2
sans faire le calcul, et ce, quelle que soit l'utilisation ultérieure de la variable dans l'environnement.
Les expressions utilisent les caractères suivants:
( ) + - * / % << >> & ^ ,
Les opérandes constituant l'expression à calculer peuvent être écrits en notation décimale, hexadécimale ou octale. Cela peut générer des erreurs de calculs ou des messages d'erreur pas toujours très clairs.
SET /A A=1+0099
Retourne un message d'erreur :
Nombre non valide. Les constantes numériques doivent être soit décimales (17), soit hexadécimales (0x11), soit octales (021).
Tout nombre commençant par zéro (tel 0099) est considéré comme octal (chiffre de 0 à 7 inclus). Donc 8 et 9 ne peuvent apparaitre dans un tel nombre.
La commande correcte est la suivante :
SET /A A=1+99
Affectation utilisateur
modifierLe commutateur /P permet d'initialiser une variable par une entrée clavier utilisateur.
SET /P variable=message
Cette commande affiche à l'écran le message, et attend que l'utilisateur donne une chaîne de caractères qui sera alors mémorisée dans la variable.
Suppression de variables
modifierSET monnom=
Supprimera la variable "monnom" de l'environnement (la mémoire), en d'autres termes cela libèrera l'espace mémoire occupé par la variable.
Manipulation de variables
modifierPour récupérer la valeur d'une variable il suffit d'entourer son nom par des %
. Par exemple:
SET monnom=Ceci est un essai ECHO %monnom%
Il est possible de ne récupérer qu'une partie de la chaîne de caractère contenue dans une variable d'environnement. Par exemple :
ECHO %monnom:~5%
Ceci récupère la chaîne à partir du caractère 5 jusqu'à la fin
ECHO %monnom:~5,2%
Ceci récupère la chaîne à partir du caractère 5 jusqu'aux 2 caractères suivants.
Si la valeur indiquée est négative, cela signifie un indexage à partir de la fin de la chaine :
ECHO %monnom:~2,-2%
Ceci récupère la chaîne du 2ème caractère en partant du début jusqu'au 2ème caractère en partant de la fin.
Il est possible de rechercher un chaine dans une variable et de la remplacer par une autre :
SET chaine_resultante=%chaine_a_traiter:chaine_recherchée=[chaine_de_remplacement]%
Ainsi avec la commande suivante, il est possible d'éliminer l'extension .bat du nom d'un fichier :
set A="monfichierbatch.bat" set A=%A:.bat=%
Variables prédéfinies
modifierLorsqu'une console de commandes DOS est lancée, certaines variables sont déjà définies.
Variables d'information système
modifierAfin de connaître ces variables, il suffit de lister toutes les variables (dépendantes de l'OS) pour y repérer celles qui peuvent servir :
Nom de variable | Signification |
---|---|
%PATH% |
Liste des répertoires où chercher les applications par défaut |
%WINDIR% |
Répertoire de windows |
%USERPROFILE% |
Répertoire utilisateur |
%USERNAME% |
Nom de l'utilisateur |
%TEMP% |
Répertoire temporaire |
%OS% |
Nom de l'OS |
Variables dynamiques
modifierCertaines variables sont des variables dynamiques du système, c'est-à-dire que leur valeur est modifiée automatiquement selon les changements de contexte ou recalculée à chaque lecture.
Nom de variable | Signification |
---|---|
%CD% |
Répertoire courant |
%DATE% |
Date courante (même résultat que DATE /T) |
%TIME% |
Heure courante (même résultat que TIME /T) |
%RANDOM% |
Nombre pseudo-aléatoire compris entre 0 et 32767 |
%ERRORLEVEL% |
Erreur de la commande précédente |
Les paramètres de commande
modifier%0 %1 %2... %9 correspondent à la commande (%0) et aux arguments ou paramètres ou commutateurs (%1 à %9) qui suivent la commande (séparés par des espaces) %* contient l'ensemble des paramètres %1 à %9.
Ils permettent de passer des variables au sein d'un fichier batch (traitement par lot) introduit par l'utilisateur au moment du lancement de la commande (d'où le nom de commutateur). À noter : %0 contient toujours le nom du fichier de commande qui est exécuté actuellement (tel qu'il a été saisi en ligne de commande ; ainsi, si on saisit "test" pour exécuter "c:\windows\system32\test.bat", $0 contiendra "test" seul).
Echo %0 Echo %*
Exemple
modifierLe script suivant est un jeu montrant quelques utilisations de la commande SET
@ECHO OFF CLS SET /A val=%RANDOM% SET /A val2=%val% / 1000 SET /A val=%val% - %val2% * 1000 SET /A val2=%val% / 100 SET /A val=%val% - %val2% * 100 SET /A val2=%val% / 10 SET /A val=%val% - %val2% * 10 SET /A nbEssais=3 ECHO Devinez un nombre compris entre 0 et 10 ECHO --------------------------------------- :debut SET /P n=Votre nombre : SET /A nbEssais-=1 IF %n%==%val% GOTO finGagne IF %nbEssais%==0 GOTO finPerdu ECHO ----- Perdu. Nouvel essai GOTO debut :finGagne ECHO Bravo ! Vous avez gagné GOTO fin :finPerdu ECHO Perdu ! Il fallait trouver %val% GOTO fin :fin PAUSE
La première variable utilisée est val
contenant la valeur à rechercher. Elle est initialisée avec la variable dynamique RANDOM
que l'on divise par 1/10ème de la valeur maximale aléatoire possible, afin d'avoir un nombre compris entre 0 et 9.
La deuxième variable utilisée est nbEssais
contenant le nombre d'essais laissés à l'utilisateur pour trouver le nombre. Elle est initialisée à 3 et décrémentée de 1 à chaque demande grâce à l'opérateur -=
La troisième variable utilisée est n
contenant la valeur entrée par l'utilisateur. Cette variable est initialisée avec le commutateur /P afin de demander une entrée clavier.
Exemple 2
modifierIl s'agit lors de la sauvegarde de toute ou partie du système de créer un nom de fichier unique structuré comme suit: NOMFICHIER_DATA_TIME_RANDOM
SET YYYYMMDD=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2% REM inverse la variable %DATE% pour obtenir une date en Année mois jour bien plus facile à trier for /F "tokens=1,2,3,4,5,6 delims==:.-/, " %%A in ("%TIME%") do SET MYTIME=%%A%%B%%C%%D%%E%%F REM cette boucle permet de filtrer la variable %TIME% afin d'en éliminer tout caractère indésirable REM dans un nom de fichier. On suppose que %TIME% se divise en 6 parties délimitées par [:.-/, ]. REM le nombre de parties et les délimiteurs n'ont pas à être exacts, il suffit qu'ils couvrent REM le problème. SET FILEUID=NOMFICHIER_%YYYYMMDD%_%MYTIME%_%RANDOM% REM enfin on rajoute un nombre aléatoire au nom du fichier afin de le rendre unique
Shift
Introduction
modifierLa commande SHIFT permet de faire un décalage des paramètres.
Dans un script, il est possible d'accéder aux paramètres de la ligne de commande en utilisant les variables %0, %1, %2, etc. L'appel de la commande SHIFT décale le contenu des variables dans la variable précédente, ainsi %0 contient ce que contenait %1, %1 contient ce que contenait %2, etc.
Ceci peut être utile pour lister et traiter tous les paramètres. Il suffit de ne lire que la variable %1 et de faire un appel à la commande SHIFT à chaque boucle.
Utilisation
modifierSHIFT [/n]
n représente un nombre indiquant le paramètre à partir duquel le décalage des paramètres commence.
Exemple
modifierLe script suivant affiche les informations sur les paramètres de la ligne de commande en bouclant sur ceux-ci.
@ECHO OFF SET /A nbParams=0 ECHO Nom de la commande : %0 :debut_boucle IF "%1"=="" GOTO fin_boucle ECHO Paramètre courant : %1 SHIFT SET /a nbParams+=1 GOTO debut_boucle :fin_boucle ECHO Nombre de paramètres : %nbParams%
Dans cet exemple, la boucle s'arrête lorsque le paramètre est un texte vide signifiant qu'il n'y a plus de paramètre.
Si les paramètres attendus par le batch sont des noms de fichier, pour éviter une erreur avec les noms de fichiers contenant des espaces sur la ligne de code
IF "%1"==""
Il faut passer par une variable intermédiaire et un test de l’existence de cette variable Comme ceci :
@ECHO OFF SET /A nbParams=0 ECHO Nom de la commande : %0 :debut_boucle SET ficparam1=%1 IF NOT DEFINED ficparam1 GOTO fin_boucle ECHO Paramètre courant : %1 SHIFT SET /a nbParams+=1 GOTO debut_boucle :fin_boucle
Shutdown
La commande "Shutdown" permet d'éteindre un ordinateur, de fermer la session, ou de forcer des applications en cours à se fermer :
Si vous écrivez
shutdown
vous aurez l'équivalent de
shutdown /?
Le commutateur "s" éteint le système ;
r" le redémarre ;
"l" ferme la session ;
"t" permet de définir un délai en secondes, donc si vous écrivez :
shutdown -s -t 360
Le système s'éteindra dans 6 minutes .
Si vous voulez annuler une mise hors tension (par exemple dans le cas de la fixation d'un délai) vous pouvez utiliser l'option "a"
Si après la commande précédente (shutdown -s -t 360) vous voulez annuler la mise en hors tension du système, tapez
shutdown -a
Start
La commande start
permet de spécifier et d’exécuter un programme.
Exemples
modifierPour l’exécution de l'invite de commande à partir d'un START, cela peut ce fait de plusieurs manières :
- En indiquant le chemin d’accès du fichier ou programme :
Start C:\Windows\System32\cmd.exe
- En ajoutant directement le nom du fichier ou programme a exécuter :
Start cmd.exe
- Une URL s'ouvrira sur la navigateur par défaut :
start https://fr.wikibooks.org
Pour l’exécution des programmes installer il faudra toujours y ajouter le chemin d’accès
Il est plus prudent de toujours mettre l’extension du programme à exécuter.
Lancer une commande avec des paramètres
modifierSi la commande contient des paramètres :
start "Titre de la fenêtre" "cmd.exe" /?
Lancer en arrière-plan
modifierUtiliser l'option "background" :
Start /b cmd.exe
Subst
Introduction
modifierLa commande SUBST est une commande externe (subst.exe) qui permet d'associer un chemin (lettre de lecteur et répertoire) à un lecteur virtuel (une lettre de lecteur non utilisée).
Le nouveau lecteur virtuel est donc une sorte de "raccourci" vers un répertoire. Le répertoire peut être local à la machine, ou distant.
Syntaxe
modifier- Ajout d'une substitution : SUBST [lettre1: [lettre2:]répertoire]
- Suppression d'une substitution : SUBST lettre1: /D
- Liste des substitutions actuellement actives : SUBST
Avec :
- lettre1:
Lettre du nouveau lecteur virtuel à définir
- [lettre2:]répertoire
Chemin à associer à la lettre du lecteur virtuel (lettre1)
- /D
Option pour signifier la suppression.
Exemples
modifierExemple 1
modifierScénario simple : on créé une substitution sur le répertoire "C:\Program Files", puis on la supprime.
C:\>subst
C:\>subst w: "C:\Program Files"
C:\>w:
W:\>dir
Le volume dans le lecteur W n'a pas de nom. Le numéro de série du volume est Bxxx-Axxx
Répertoire de W:\
20/02/2007 17:50 <REP> . 20/02/2007 17:50 <REP> .. 04/01/2006 11:23 <REP> Adobe 05/01/2006 11:46 <REP> AMD 05/01/2006 11:48 <REP> ATI Technologies ...etc 0 fichier(s) 0 octets 41 Rép(s) 123 246 986 864 octets libres
W:\>c:
C:\>dir "C:\Program Files"
Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est Bxxx-Axxx
Répertoire de C:\Program Files
20/02/2007 17:50 <REP> . 20/02/2007 17:50 <REP> .. 04/01/2006 11:23 <REP> Adobe 05/01/2006 11:46 <REP> AMD 05/01/2006 11:48 <REP> ATI Technologies ...etc 0 fichier(s) 0 octets 41 Rép(s) 123 246 986 864 octets libres
C:\>subst w: C:\WINDOWS
Lecteur déjà affecté par SUBST
C:\>subst w: /D
C:\>subst
C:\>
On voit que la commande dir "C:\Program Files" et dir seule sur le lecteur W:\ donnent le même résultat : il s'agit bien du même répertoire.
Exemple 2
modifierSubstitution d'un répertoire partagé sur une autre machine (substitution réseau).
C:\>subst W: "\\machine.domaine.fr\Répertoire partagé"
C:\>subst
W:\: => UNC\machine.domaine.fr\Répertoire partagé
C:\>subst w: /D
C:\>subst
C:\>
Time
Introduction
modifierLa commande TIME
permet de modifier l'heure système, ou simplement de la lire.
Utilisation
modifierTIME [/T | heure]
Si aucun paramètre n'est spécifié, la commande demande à l'utilisateur la nouvelle heure.
Le commutateur /T permet d'afficher l'heure courante sans rien demander (aucune attente).
Si une heure est spécifiée en paramètre, l'heure système est modifiée.
Résultat
modifierC:\>time
L'heure actuelle est : 9:57:37,70
Entrez la nouvelle heure :
Exemple
modifierLecture
modifierLe script suivant récupère le retour de TIME /T grâce à la commande For et découpe la ligne suivant les caractères : pour ne récupérer que certaines informations.
@ECHO OFF
FOR /F "usebackq tokens=1,2 delims=:" %%A in (`TIME /T`) DO (
ECHO Heure: %%A
ECHO Minutes: %%B
)
Le script suivant récupère le retour de %TIME% grâce à la commande For et découpe la ligne suivant les caractères : pour ne récupérer que certaines informations. Note, ce script ne permet pas de récupérer l'heure sur 2 digits contrairement à l'autre.
@ECHO OFF
FOR /F "usebackq tokens=1-4 delims=: " %%A in (`echo %TIME%`) DO (
ECHO Heure: %%A
ECHO Minutes: %%B
ECHO Secondes: %%C
ECHO MSecondes: %%D
)
Écriture
modifiertime 00:00:00
Voir aussi
modifier- La commande Date.
Timeout
Introduction
modifierCette commande crée un délai d'attente spécifié en secondes (abrégeable par une frappe de touche. Notons qu'un paramètre peut empêcher cet abrègement.).
Syntaxe
modifierTIMEOUT [/T] délai d'attente [/NOBREAK]
Options
modifier/T
- Spécifie le délai d'attente (en secondes.). Ce délai peut aller de -1 à 99999 secondes.
/NOBREAK
- Fait ignorer à la commande tout appui de touche jusqu'à la fin du délai. Notez toutefois que la combinaison de touches ConTRoL+C peut annuler le délai.
Exemples
modifierTIMEOUT /T 300 TIMEOUT /T 30 /NOBREAK TIMEOUT /T -1
Remarque: Un délai d'attente égal à -1 secondes signifie qu'une frappe de touche est attendue.
TIMEOUT /T -1 /NOBREAK
Cet exemple requiert que l'on entre la combinaison de touches ConTRoL+C.
Title
Introduction
modifierCommande interne DOS, elle permet de modifier le titre de la fenêtre de l'interpréteur.
Utilisation
modifierTITLE titre
Exemple
modifierTITLE Ceci est ma fenêtre !
Tree
Commande Fichier Batch - TREE
Affiche une carte graphique de l'arborescence d'un répertoire
Crée une carte graphique de répertoires et sous répertoires. La structure affichée par arbre dépend des paramètres que vous spécifiez sur la ligne de commande.
- Syntaxe
tree[Lecteur:] [Chemin] [/f] [/a]
paramètres
Entraînement : indique le lecteur qui contient le disque pour lequel vous souhaitez afficher le répertoire structure.
Chemin d'accès : indique le répertoire pour lequel vous voulez afficher la structure de répertoire.
/f : affiche les noms des fichiers dans chaque répertoire.
/a : indique que l'arbre est d'utiliser des caractères de texte à la place de caractères graphiques pour montrer les lignes reliant sous-répertoires.
Par exemple, utiliser un dossier comme C:\WINDOWS\TEMP ou C:\WINNT\TEMP de sorte que vous ne serez pas submergé en le testant.
TREE/F affichera les noms de fichiers en plus de répertoires.
Pour envoyer la sortie vers un fichier texte : TREE /A> mymap.txt
. L'/ A utilisera formatage simple qui va mieux lire dans le fichier de sortie.
Exemples
Pour afficher, un écran à la fois, les fichiers dans tous les répertoires sur le lecteur C, tapez :
TREE c: \/f | more
Pour imprimer la même liste que l'exemple précédent affiche, Type: TREE c: \/f prn
Vue pour exemple
Type
Description
modifierTYPE est la commande interne qui permet d'afficher le contenu des fichiers.
Utilisation
modifierTYPE chemin
Cette commande ne tient pas compte des attributs du fichier. C'est à dire qu'elle permet d'afficher le contenu de fichiers cachés.
Ver
Introduction
modifierVersion information
Commande interne DOS, elle affiche la version de l'interpréteur.
Utilisation
modifierVER
Exemple
modifierC:\>VER Microsoft Windows 2000 [Version 5.00.2195]
Vol
Introduction
modifierVolume name
La commande VOL permet d'obtenir les informations de nom et numéro de série d'une partition.
Utilisation
modifierVOL [lecteur]
Si le lecteur n'est pas présent, la commande retourne les informations de la partition dans laquelle se trouve le répertoire courant.
Exemples
modifierVOL VOL D:
Le script suivant permet d'isoler le nom et le numéro de série grâce à la commande DOS/For
@ECHO OFF SET /A ligneCourante=0 FOR /F "usebackq tokens=7* delims= " %%A in (`VOL %1`) DO ( IF %ligneCourante%==0 ( ECHO Nom: %%B ) ELSE ( ECHO Série: %%B ) SET /A ligneCourante+=1 )
La commande VOL retournant deux lignes, la variable %ligneCourante%
permet d'identifier sur quelle ligne le FOR se trouve. Le découpage se fait sur les mots, et c'est à partir du 8ème mot pour les deux lignes qu'apparaissent les données intéressantes (en français).
Where
Cette commande indique les emplacements des exécutables.
Exemple
modifier> where java
C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe
C:\Program Files\Java\jdk1.8.0_241\bin\java.exe
Whoami
Introduction
modifierLa commande Whoami
permet d'obtenir les informations d'identification de l'utilisateur courant (« qui suis-je ? », en anglais : "Who am I ?").
Utilisation
modifierWhoami [options...]
Si aucune option n'est spécifiée, la commande affiche le nom de complet de l'utilisateur incluant le nom de la machine ou de domaine, sous la forme :
domain\username
Exemple :
wikibooks\wikiuser
Exemple avec toutes les informations au format csv :
C:\Windows\System32>whoami /all /fo csv "Nom d’utilisateur","SID" "wikibooks\wikiuser","S-1-5-21-1234567890-2345678901-3456789012-1000" "Nom du groupe","Type","SID","Attributs" "Tout le monde","Groupe bien connu","S-1-1-0","Groupe obligatoire, Activé par défaut, Groupe activé" "wikibooks\HelpLibraryUpdaters","Alias","S-1-5-21-1234567890-2345678901-3456789012-1009","Groupe obligatoire, Activé par défaut, Groupe activé" "wikibooks\HomeUsers","Alias","S-1-5-21-1234567890-2345678901-3456789012-1001","Groupe obligatoire, Activé par défaut, Groupe activé" "BUILTIN\Administrateurs","Alias","S-1-5-32-522","Groupe utilisé pour les refus uniquement" "BUILTIN\Utilisateurs du journal de performances","Alias","S-1-5-32-523","Groupe obligatoire, Activé par défaut, Groupe activé" "BUILTIN\Utilisateurs","Alias","S-1-5-32-524","Groupe obligatoire, Activé par défaut, Groupe activé" "AUTORITE NT\INTERACTIF","Groupe bien connu","S-1-5-4","Groupe obligatoire, Activé par défaut, Groupe activé" "OUVERTURE DE SESSION DE CONSOLE","Groupe bien connu","S-1-2-1","Groupe obligatoire, Activé par défaut, Groupe activé" "AUTORITE NT\Utilisateurs authentifiés","Groupe bien connu","S-1-5-11","Groupe obligatoire, Activé par défaut, Groupe activé" "AUTORITE NT\Cette organisation","Groupe bien connu","S-1-5-15","Groupe obligatoire, Activé par défaut, Groupe activé" "LOCAL","Groupe bien connu","S-1-2-0","Groupe obligatoire, Activé par défaut, Groupe activé" "AUTORITE NT\Authentifications NTLM","Groupe bien connu","S-1-5-64-10","Groupe obligatoire, Activé par défaut, Groupe activé" "Étiquette obligatoire\Niveau obligatoire moyen","Nom","S-1-16-8010","Groupe obligatoire, Activé par défaut, Groupe activé" "Nom de privilège","Description","État" "SeShutdownPrivilege","Arrêter le système","Désactivé" "SeChangeNotifyPrivilege","Contourner la vérification de parcours","Activé" "SeUndockPrivilege","Retirer l’ordinateur de la station d’accueil","Désactivé" "SeIncreaseWorkingSetPrivilege","Augmenter une plage de travail de processus","Désactivé" "SeTimeZonePrivilege","Changer le fuseau horaire","Désactivé"
Wmic
Windows Management Instrumentation (WMI) est l’implémentation de Microsoft du Web-Based Enterprise Management (WBEM), le standard du Distributed Management Task Force (DMTF). Il prend en charge le modèle de données CIM (Common Information Model), qui décrit les objets d'un environnement de gestion.
WMIC (Windows Management Instrumentation Command-line) fournit une interface de ligne de commande dans l'Infrastructure de gestion Windows (WMI) qui permet de tirer parti de WMI pour gérer les ordinateurs. Windows PowerShell permet aussi d'utiliser simplement WMI depuis la ligne de commande.
Qu'est-ce que WMI ?
modifierWMI est l'implémentation par Microsoft du modèle commun d'information (Common Information Model (CIM) en anglais) développé par le comité spécial de la gestion distribuée (the Distributed Management Task Force (DMTF)). Le DMTF est une association de diverse entreprises de l'informatique (e.g. Novell, Microsoft, Cisco, HP, etc.) développant des normes dans l'espace de gestion des entreprises (Voir http://www.dmtf.org pour plus d'information). Comme les grandes entreprises ont beaucoup d'ordinateurs avec beaucoup d'environnement logiciels, gérer divers environnements peut être un grand défi. Afin d'unifier les techniques de gestion pour la simplicité, le DMTF a défini le CIM pour représenter les entités gérables du monde réel de manière unifiée. Le modèle objet du CIM utilise des termes et une sémantique uniques à tous les constructeurs et développeurs logiciels. Ce modèle objet est implémenté dans une base de données appelée dépôt CIM (CIM repository), comme illustré dans le schéma ci-dessous.
Based on the CIM model, WMI includes real-world manageable components, available from the DMTF standards with some specific extensions that represent the various Windows components. Moreover, WMI exposes a collection of COM scriptable objects that allow various applications to take advantage of the management information. WMI is the Microsoft implementation of CIM.
As part of the installation process, most of the Microsoft applications available today (e.g. SQL 2000, Exchange 2000/2003, Office 2000/XP/2003, Internet Explorer 6.0, Host Integration Server, Automated Deployment Services) extend the standard CIM object model to add the representation of their manageable entities in the CIM repository. This representation is called a class, and it exposes information through properties and allows the execution of some actions via methods. The access to the manageable entities is made via a software component, called a “provider” which is nothing else than a DLL implementing a COM object written in C/C++ (See note at the end of this section). Because a provider is designed to access some specific management information, the CIM repository is also logically divided into several areas called a namespace. Each namespace contains a set of providers with their related classes specific to a management area (i.e. RootDirectorydap for active directory, rootsnmp for snmp information or rootmicrosoftiisv2 for internet information server information).
to locate the huge amount of management information available from the cim repository, wmi comes with a sql-like language called the wmi query language (wql). briefly, wql is a subset of the standard american national standards institute structured query language (ansi sql) with minor semantic changes. a basic wql query remains fairly understandable for people with a basic sql knowledge. therefore, wql is dedicated to wmi and is designed to perform queries against the cim repository to retrieve information or get event notifications.
more information about some of the terms that cim is using is available on msdn at http://msdn.microsoft.com/library/en-us/dnwmi/html/cim.asp and http://msdn.microsoft.com/library/en-us/dnwmi/html/wmicim.asp.
What is the overall development process?
modifierBecause WMI abstracts the manageable entities with CIM and a collection of providers, the development of a provider implies several steps. Although there are 4 major steps with some sub-steps, each of them taken separately are quite easy to execute. These can be summarized as follows:
Step 1 – Create the manageable entity model
- Define a model
- Implement the model
Step 2 – Create the WMI Provider
- Determines the provider type to implement
- Determines the hosting model of the provider
- Create the provider template with the ATL wizard
- Implement the code logic in the provider
- Register the provider with WMI and the system
Step 3 - Test the provider
Step 4 - Create consumer sample codes
Why is it important to write a WMI provider for our customers?
modifierSince the release of the first WMI implementation during the Windows NT 4.0 SP4 era (as an out-of-band download), Microsoft never stopped to add WMI providers in Windows. Under Windows NT 4.0, Microsoft had roughly 15 WMI providers available once WMI was installed. When Windows 2000 was released, customers discovered 29 WMI providers part of the Operating System installation. More recently, with the release of Windows Server 2003, Microsoft included in the platform more than 80 WMI providers. This has been a sign for many customers that WMI became at Microsoft the “ubiquitous” management layer of Windows, even if this commitment has never been explicit from Microsoft. This is the net result of the on-going work made during the last Windows release.
During these last years, due to a constant increasing exposure of management data through WMI in Windows, more and more people in the field started to develop scripts and automation procedures based on WMI. Beyond the scripting needs, most leading management software in the world, such as MOM, SMS, ADS, HP OpenView for Windows (HPOV), BMC, CA, or Kaseya are WMI-enabled and capable to consume and provide WMI information through various User Interfaces. This enables administrators and operators, not capable to script or program on top of WMI, to enjoy the benefits of WMI without even learning about WMI. However, if they want to, because WMI is scriptable, it gives the opportunity to any of them to consume WMI information from scripts or from any Enterprise Management software that is WMI-aware.
These trends have made WMI very popular among our customers management communities. Tons of references and publications exist on the Internet about WMI. At the same time, this story increased our customer expectations because the management communities leveraging WMI today expect our management layer to be predictable and consistent through WMI for more and more Windows manageable components. This also means that our customers expect to leverage the knowledge and investment made in WMI during these past years to improve, pursue and achieve their business goals at lower cost.
What WMI offers for free out-of-the box?
modifierFor someone willing to develop one or many WMI providers, WMI offers many features out of the box. Here are the most important advantages:
- Automation interfaces: Because WMI comes with a set of automation interfaces ready to use, all management features supported by a WMI provider and its set of classes get the scripting support for free out-of-the box. Beyond the WMI class design and the provider development, the Microsoft development and test teams are not required to create, validate and test a scripting model as it is already available from WMI.
- .NET Management interfaces: Because the System.Management namespace relies on the existing COM/DCOM plumbing, the created WMI provider and its set of WMI classes becomes automatically available to all .NET applications independently of the language used (e.g. C#, VB.NET). Beyond the WMI class design and the provider development, like for scripting, the Microsoft development and test teams are not required to create, validate and test new assemblies to support a new namespace in the .NET Framework as this support is already available from WMI for free.
- C/C++ COM/DCOM programming interfaces: Like most components in Windows, COM/DCOM programmers can leverage the features of the provider they develop at the COM/DCOM interfaces level. Like in previous environments (Scripting and .NET Framework), a COM/DCOM consumer just needs to interact with the standard set of WMI COM interfaces to leverage the WMI provider capabilities and its set of supported WMI classes. To make all management information available from the native APIs, the WMI provider developer just needs to interact with a set of pre-defined WMI COM interfaces. This will make the management information available at the WMI COM level automatically. Moreover, the scripting COM interface object model is very similar to the COM/DCOM interface object model, which makes life very easy for developers to be familiar with the scripting experience.
- Remoting capabilities over DCOM and SOAP: More than simply offering local COM capabilities, as management is all about remoting, WMI offers the DCOM transport. In addition, SOAP transport will be available in Windows Server 2003 R2 through the WS-Management initiative lead by Microsoft, INTEL, SUN and DELL. This initiative allows to run any scripts remotely or to consume WMI data through a specific set of interfaces handling SOAP requests/responses. The big advantage for the WMI provider developer is when he exposes all his features through WMI, WS-Management can in turn consume that information as well (embedded objects in WMI instances are not supported in R2. It is however a target for Longhorn). All the layering to WS-Management and the mapping of the CIM data model to SOAP comes for free out of the WMI/WS-Management solution. In the event DCOM must be used, implementing DCOM requires the presence of a proxy DLL deployed on each client machine. As WMI is available in the Windows Operating System since Windows 2000, you don’t need deal with these issues either.
- Support for Queries: WMI offers support for WQL queries out of the box. This means that if a provider is not designed to support queries, WMI supports it by using an enumeration technique out of your provider. That implies that you get the WQL query support for free.
- Eventing capabilities: WMI offers the capability to notify a subscriber for any event it is interested in. WMI uses the WMI Query Language (WQL) to submit WQL event queries and defines the type of events to be returned. The eventing mechanism, with all related call-backs, is part of the WMI COM/DCOM and automation interfaces. Any one writing a WMI provider can have the benefit of this functionality at no cost for his customers. It will be up to the consumer to decide how it wants to consume the management information exposed by the WMI provider and its related set of WMI classes.
- Code template generator: To speed up the process of writing a WMI provider including all COM/DCOM interfaces and related definitions, the WMI team developed the WMI ATL Wizard to generate the code template implementing a provider. The code generated is based on the WMI class model initially designed by the developer. The WMI provider developer will be able to interface the pre-defined COM/DCOM interfaces for the WMI provider with its set of native APIs retrieving the management information to expose. The exercise consists in filling the “gaps” in the provider code to create the desired interfacing logic.
- Predictability: Predictability is an important concern for our customers because it defines the capability of someone having an experience with a set of interfaces managing a Windows component to apply this knowledge right away, intuitively, to any other manageable Windows component without having relearn everything from ground up. Predictability for a customer is a real gain as it increases the Return of Investment (ROI). A person facing such a situation simply expects things to work the same way based on his previous experience. The constant increase of COM programming/scriptable interfaces has a huge impact on the predictability, as this causes more pain to our customers to automate, manage Windows and leverage their existing knowledge. WMI with CIM address this problem by always exposing the same programming object model (COM/DCOM, Automation, .NET) whatever the manageable entity is.
- Protect existing customer investments: Protecting customers and partners investment motivates customers to invest in technologies. As Microsoft did invest a lot these past years in writing WMI providers (more than 80 in Windows Server 2003), customers and partners invested in tools leveraging the WMI capabilities of Windows. Therefore, it is a common sense for them to continue to exploit these capabilities instead of having to use a (new) set of specific interfaces for each Windows manageable component. A specific set of interfaces means having a specific set of agents or in-house developed software based on a new model or set of interfaces especially dedicated to a component or technology. By leveraging the capabilities of WMI today, customers and partners can leverage the work investment made in the past while minimizing their costs in developments, learning curves and new discoveries. This will also have a great impact on the stability and reliability of their infrastructure as they continue to leverage an existing implementation with an improved technology.
- Provide a logical and unified administration model: As briefly described before in the introduction, this model is based on an industry standard called CIM defined by the DMTF (http://www.dmtf.org). The CIM class-based schema is defined by a consortium of constructors and software developers that meets the requirements of the industry. This implies that not only Microsoft leverages the WMI capabilities, but also any other third party constructors or developers write their own code to fit into the model (For instance, INTEL is doing this for some their network driver adapters and software. HP is leveraging existing WMI providers and implementing their own WMI providers in their HP Open View Enterprise Management software. IBM consumes WMI from the Tivoli management suite, MOM and SMS are also consuming and providing WMI information. Last but not least, WMI XP SP2 is leveraging WMI to get information status from anti-virus software and firewall).
What do you need to work with WMI?
modifierFrom a development perspective, you must run Windows 2000, Windows XP or Windows Server 2003. Visual Studio 2003 or 2005 must be installed on the machine. The latest service pack and fixes are obviously recommended. The Windows machine doesn’t have to be part of any domain unless the provider you plan to develop requires to access information in the domain. For testing purposes the Windows installation can run as a virtual machine with Virtual PC 2004 or Virtual Server 2005 (See http://msdn.microsoft.com/library/en-us/wmisdk/wmi/system_requirements.asp for more information).
Note: This document has been written with Visual Studio 2005 Beta 1 (Whidbey). It will be updated when Beta 2. If you use Visual Studio 2003, don’t be surprised if your screen shots don’t match the ones you have in this document.
Some WMI tools can also be very useful during the design and development phases. These tools are:
- The MOF compiler (MOFCOMP.Exe): The Managed Object Format (MOF) compiler parses a file containing Managed Object Format statements and adds the classes and class instances defined in the file to the CIM repository. The MOF format is a specific syntax to define CIM class representation in an ASCII file (e.g. MIB are to SNMP such as MOF files are to CIM). MOFCOMP.Exe is included in every WMI installation. Every definition existing in the CIM repository is initially defined in a MOF file. MOF files are located in %SystemRoot%\system32\wbem. During the WMI setup, they are loaded in the CIM repository.
- The WMI Administrative Tools: The WMI Administrative Tools are made of four tools: WMI CIM Studio, WMI Object Browser, WMI Event Registration and WMI Event viewer. You can download these tools from http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en. The most important tool for a WMI provider development is WMI CIM Studio as it helps in the initial WMI class creation in the CIM repository. It uses a web interface to display information and relies on a collection of ActiveX components installed on the system when it runs for the first time. WMI CIM Studio provides the ability to:
- Connect to a chosen system and browse the CIM repository in any namespace available.
- Search for classes by their name, by their descriptions or by property names.
- Review the properties, methods and associations related to a given class.
- See the instances available for a given class of the examined system.
- Perform Queries in the WQL language.
- Generate a MOF file based on selected classes.
- Compile a MOF file to load it in the CIM repository.
- Winmgmt.Exe: WinMgmt.Exe is not a tool; it is the executable that implements the WMI Core service. Under Windows NT, Windows 2000 and Windows Server 2003, WMI runs as a service. On computers running Windows 98, Windows 95 or Windows Millennium, WMI runs as an application. Under Windows NT, Windows 2000, Windows XP or Windows Server 2003, it is also possible to run this executable as an application, in which case, the executable runs in the current user context. For this the WMI service must be stopped first. The executable supports some switches that can be useful when starting WMI as a service or as an application. WMI provider developers who may want to debug their providers essentially need to run the WMI service as an application.
- WBEMTEST.Exe: WBEMTEST.Exe is a WMI tester tool, which is delivered in standard with WMI. This tool allows an administrator or a developer to perform most of the tasks from a graphical interface that WMI provides at the API level. Although available under Windows NT, Windows 2000, Windows XP and Windows Server 2003, this tool is not officially supported by Microsoft. Actually, the usage of this tool is not easy at first glance unless you are used to the WMI COM API and the WMI concepts. With WBEMTEST, you can:
- Enumerate, open, create and delete classes.
- Enumerate, open, create and delete instances of classes.
- Select a namespace.
- Perform data and event queries.
- Execute methods associated to classes or instances.
- Execute every WMI operation asynchronously, synchronously or semi-asynchronously.
- The WMI command line tool (WMIC): WMIC is a command-line tool designed to ease WMI information retrieval about a system by using some simple keywords (aliases). WMIC.Exe is only available under Windows XP Professional and Windows Server 2003. It is not included in other Windows platforms. By typing “WMIC /?” from the command-line, you can obtain a complete list of the switches and reserved keywords available. By typing “WMIC switch-name /?”, you can gather more information about the switch usage.
- WBEMDUMP.Exe: WBEMDUMP is a tool delivered with the Platform SDK. This command line tool comes with its own Visual C++ project. Basically, the tool can show the CIM repository classes, instances, or both. It is possible to retrieve the same information as that retrieved with WMIC. WBEMDUMP.Exe requires more specific knowledge about WMI, as it doesn’t abstract WMI as WMIC. However, it runs under Windows NT 4.0 and Windows 2000. It is also possible to execute methods exposed by classes or instances. Even if it is not a standard WMI tool delivered with the system installation, this tool can be quite useful for exploring the CIM repository and WMI features.
Comment vérifier que le WMI est bien opérationnel sur la machine
modifierSi le WMI est totalement opérationnel sur la machine, alors vous obtiendrez le message "connexion réussie" lors du contrôle du WMI, comme sur cette image : (aller sur "Gestion de l'ordinateur", bouton droit sur Contrôle WMI, puis "Propriétés")
Dans le cas contraire, il faudra alors passer au paragraphe "Réparation du WMI"...
Nota : Microsoft propose aussi un outil de vérification du service WMI, en anglais (WMIDiag.exe), et appelé "WMI Diagnosis Utility" : https://www.microsoft.com/en-us/download/details.aspx?id=7684 ; cet outil fonctionne actuellement sous Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 et Windows Server 2012 R2.
Réparation du WMI
modifier- Lancer la réparation sous un compte administrateur.
- À la fin de la réparation du WMI, il vous faudra aussi procéder à la réparation du « System Center Configuration Manager » (SCCM, anciennement « agent SMS ») si par hasard il était présent sur votre système.
Sous Microsoft Windows XP (au moins avec Service Pack 2)
modifierIl vous suffira d'ouvrir une fenêtre "DOS" (Démarrer/exécuter/CMD <entrée>), puis de taper les commandes suivantes l'une après l'autre :
- cd /d %windir%\system32\wbem <entrée>
- net stop ccmexec /y <entrée>
- net stop sharedaccess /y <entrée>
- net stop winmgmt /y <entrée>
- rd /S /Q repository <entrée>
- rundll32 wbemupgd, UpgradeRepository <entrée>
Nota : il se peut que certains services tels que CCMEXEC ou SHAREDACCESS n'existent pas sur votre configuration, ça ne posera pas de problème pour la suite de la réparation.
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de l'ordinateur. C'est tout.
Sous Microsoft Windows Server 2003 (au moins avec Service Pack 1)
modifierIl vous suffira d'ouvrir une fenêtre "DOS" (Démarrer/exécuter/CMD <entrée>), puis de taper les commandes suivantes l'une après l'autre :
- cd /d %windir%\system32\wbem <entrée>
- net stop ccmexec /y <entrée>
- net stop sharedaccess /y <entrée>
- net stop winmgmt /y <entrée>
- rd /S /Q repository <entrée>
- rundll32 wbemupgd, RepairWMISetup <entrée>
Nota : il se peut que certains services tels que CCMEXEC ou SHAREDACCESS n'existent pas sur votre configuration, ça ne posera pas de problème pour la suite de la réparation.
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de la machine. C'est tout.
Sous Microsoft Windows Vista, Windows 7, Windows 8, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2
modifierIl vous faudra lancer l'invite de commande en tant qu'administrateur (clic droit dessus puis sur "exécuter en tant qu'administrateur" pour le faire en mode d'élévation de privilèges). Puis vous taperez les commandes suivantes l'une après l'autre :
- cd /d %windir%\system32\wbem <entrée>
- net stop ccmexec /y <entrée>
- net stop sharedaccess /y <entrée>
- net stop winmgmt /y <entrée>
- rd /S /Q repository <entrée>
- net start winmgmt <entrée>
- winmgmt /salvagerepository <entrée>
Nota : il se peut que certains services tels que CCMEXEC ou SHAREDACCESS n'existent pas sur votre configuration, ça ne posera pas de problème pour la suite de la réparation.
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de la machine. C'est tout.
Sous autres (anciennes) versions Microsoft Windows
modifierNota : Ca provoquera un reset de la configuration ICS et ICF.
Il vous suffira d'ouvrir une fenêtre "DOS" (Démarrer/exécuter/CMD <entrée>), puis de taper les commandes suivantes l'une après l'autre :
- winmgmt /clearadap <entrée>
- winmgmt /kill <entrée>
- winmgmt /unregserver <entrée>
- winmgmt /regserver <entrée>
- winmgmt /resyncperf <entrée>
- net stop winmgmt /y <entrée>
- del %windir%\system32\Wbem\Repository\*.* /s <entrée>
- net start winmgmt <entrée>
- %windir%\system32\wbem\wbemtest.exe <entrée>
Une fois que la dernière commande de réparation sera terminée, vous reviendrez au prompt. Vous devrez alors procéder à un reboot de la machine. C'est tout.
Exemples wmic
modifierObtenir la clé de licence Windows
modifierwmic path softwarelicensingservice get OA3xOriginalProductKey
GFDL | Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. |