DOS/Version imprimable

Un livre de Wikilivres.
< DOS
Sauter à la navigation Sauter à la recherche

Nuvola-inspired File Icons for MediaWiki-fileicon-ps.png

Ceci est la version imprimable de DOS.

  • Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
  • Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
  • Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.


DOS

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

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. Une copie de cette licence est incluse dans l'annexe nommée « Licence de documentation libre GNU ».

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[modifier | modifier le wikicode]

La 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[modifier | modifier le wikicode]

Beaucoup 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[modifier | modifier le wikicode]

Un fichier contient des données. Un répertoire contient des fichiers et d'autres répertoires.

La syntaxe générale[modifier | modifier le wikicode]

Un 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[modifier | modifier le wikicode]

Les 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[modifier | modifier le wikicode]

Deux 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[modifier | modifier le wikicode]

L'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[modifier | modifier le wikicode]

Il 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[modifier | modifier le wikicode]

Les 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[modifier | modifier le wikicode]

Les 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[modifier | modifier le wikicode]

Certains 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[modifier | modifier le wikicode]

Dans 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[modifier | modifier le wikicode]

Certains 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[modifier | modifier le wikicode]

La 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[modifier | modifier le wikicode]

Afficher 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 | modifier le wikicode]

Lettre Commandes
A

Append • Arp • Assoc • At • Atmadm • Attrib

B

Bcdedit • Bootcfg • Break

C

Cacl • Cacls • Call • Cd • Chcp • Chdir • Chkdsk • Chkntfs • Choice • Cipher • Cls • Cmd • Cmstp • Color • Command • Comp • Compact • Convert • Copy • Cscript

D

Date • Debug • Defrag • Del • Deltree • Dir • Diskcomp • Diskcopy • Diskpart • Diskperf • Dnscmd • Doskey

E

Echo • Edit • Edlin • Endlocal • Erase • Eventcreate • Eventtriggers • Exe2bin • Exit • Expand

F

Fc • Fdisk • Find • Findstr • Finger • Fixboot • Fixmbr • For • Format • Fsutil • Ftp • Ftype

G

Getmac • Goto • Graftabl

H

Help • Hostname

I

Icacls • If • Ipconfig • Ipv6

J

Jview

K

Keyb • Kill

L

Label • Lpq • Lpr

M

Makecab • Md • Mem • Mkdir • Mklink • Mode • More • Mountvol • Move • Msiexec

N

Nbtstat • Net • ( Net send • Net start • Net stop • Net statistics • Net use) • Netsh • Netstat • Nlsfunc • Nslookup • Ntbackup

P

Path • Pathping • Pause • Pentnt • Ping • Popd • Powershell • Print • Prompt • Pushd

R

Rcp • Rd • Recover • Reg • Regsvr32 • Rem • Ren • Rename • Replace • Rexec • Rmdir • Robocopy • Route • Rsh • Rsm • Runas

S

Sc • Scandisk • Schtasks • Set • Setlocal • Setver • Setx • Sfc • Shift • Shutdown • Sort • Start • Subst • Sys • Systeminfo

T

Taskkill • Tasklist • Tcmsetup • Telnet • Tftp • Time • Timeout • Title • Tlist • Tracert • Tree • Type • Typeperf

V

Ver • Verify • Vol • Vssadmin

W

W32tm • Where • Whoami • Wmic

X

Xcopy


At

Commande qui sert à faire des tâches planifiées sous Windows en ligne de commande.


Attrib

Description[modifier | modifier le wikicode]

Affiche ou change les attributs de fichiers ou dossiers.


Syntaxe[modifier | modifier le wikicode]

ATTRIB 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 | modifier le wikicode]

+
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 | modifier le wikicode]

[lecteur:][chemin][nom_de_fichier]
Spécifie un ou plusieurs fichiers à traiter par ATTRIB.


Options[modifier | modifier le wikicode]

/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[modifier | modifier le wikicode]

Pour masquer un fichier :

ATTRIB +H C:\Docs\fichier.txt /D


Break

Interromp l'execution d'un batch.


Call

Introduction[modifier | modifier le wikicode]

Commande 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[modifier | modifier le wikicode]

Pour 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 | modifier le wikicode]

@ECHO OFF
CALL config.bat
ECHO Retour au batch principal

Exemple 2 : appeler une sous-routine du fichier batch[modifier | modifier le wikicode]

@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[modifier | modifier le wikicode]

Change Directory

Cette commande permet de changer de répertoire. C'est en fait un raccourci pour Chdir.

Utilisation[modifier | modifier le wikicode]

cd

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[modifier | modifier le wikicode]

Change Directory

Cette commande permet de changer de répertoire. C'est en fait un raccourci pour Chdir.

Utilisation[modifier | modifier le wikicode]

cd

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[modifier | modifier le wikicode]

Clear Screen

Cette commande interne du DOS permet d'effacer l'écran (ou la fenêtre) de l'interpreteur de commande.

Utilisation[modifier | modifier le wikicode]

Cls

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[modifier | modifier le wikicode]

Cette commande permet de changer la couleur d'arrière plan ainsi que celle des caractères.

Utilisation[modifier | modifier le wikicode]

Il 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[modifier | modifier le wikicode]

Commande interne DOS, elle permet de convertir les volumes FAT en NTFS.

Utilisation[modifier | modifier le wikicode]

CONVERT [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[modifier | modifier le wikicode]

Copy

Cette commande copie un ou plusieurs fichiers sur un autre emplacement.

Utilisation[modifier | modifier le wikicode]

COPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
     [+ source [/A | /B] [+ ...]] [cible [/A | /B]]

Paramètres[modifier | modifier le wikicode]

source
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[modifier | modifier le wikicode]

La commande DATE permet de modifier la date système, ou simplement de la lire.

Utilisation[modifier | modifier le wikicode]

DATE [/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[modifier | modifier le wikicode]

C:\>date
La date du jour est : 06/07/2012
Entrez la nouvelle date : (jj-mm-aa)

Exemple[modifier | modifier le wikicode]

Lecture[modifier | modifier le wikicode]

Le 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
 )

Logo 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[modifier | modifier le wikicode]

date 28-03-2020

Voir aussi[modifier | modifier le wikicode]


Del

Introduction[modifier | modifier le wikicode]

Delete

Erase

Commande interne DOS, elle permet de supprimer des fichiers.

Utilisation[modifier | modifier le wikicode]

DEL options noms
ERASE options noms
  • La liste noms peut employer les caractères génériques * et ?.

Options[modifier | modifier le wikicode]

/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[modifier | modifier le wikicode]

 del *.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 :

 forfiles /p "C:\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.

ATTENTION :

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.

Option

/ Y - Exécute la commande DELTREE sans fournir d'invite pour confirmer la suppression.

Exemples

Pour supprimer le répertoire LETTERS, y compris tous les fichiers et sous-répertoires qu'il contient, entrez

DELTREE c: \ letters.


Dir

Introduction[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

DIR [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 | modifier le wikicode]

/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[modifier | modifier le wikicode]

Il 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[modifier | modifier le wikicode]

Commande de gestion des partition.

Cette commande permet de contourner les bridages de la gestion des disques Windows 7.

Exemple[modifier | modifier le wikicode]

Pour supprimer le montage du lecteur S (sans effacer la partition) :

list volume
select disk 0
select volume 1
remove letter S


Echo

Introduction[modifier | modifier le wikicode]

Commande interne DOS, elle permet d'afficher des messages et de basculer le mode echo.

Utilisation[modifier | modifier le wikicode]

ECHO [ON|OFF]
ECHO message

Mode echo[modifier | modifier le wikicode]

Quand 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[modifier | modifier le wikicode]

Le 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 | modifier le wikicode]

@ECHO OFF
ECHO Ceci est un message ^& un test

La commande affiche :

Ceci est un message & un test


Edit

Introduction[modifier | modifier le wikicode]

La 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[modifier | modifier le wikicode]

EDIT [fichier]

Ouvre l'éditeur de fichier DOS avec ou sans un fichier.

Logo Sous Windows 10, 'edit' n’est pas reconnu en tant que commande interne. Ils recommandent "notepad" à la place.


Exemple[modifier | modifier le wikicode]

edit C:\Windows\System32\drivers\etc\hosts


Del

Introduction[modifier | modifier le wikicode]

Delete

Erase

Commande interne DOS, elle permet de supprimer des fichiers.

Utilisation[modifier | modifier le wikicode]

DEL options noms
ERASE options noms
  • La liste noms peut employer les caractères génériques * et ?.

Options[modifier | modifier le wikicode]

/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[modifier | modifier le wikicode]

 del *.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 :

 forfiles /p "C:\Temp" /s /m *.* /c "cmd /c Del @path" /d -60


Exe2bin

Introduction[modifier | modifier le wikicode]

Executable to Binary

Cet utilitaire permet de convertir des fichiers exécutables au format binaire.


Syntaxe[modifier | modifier le wikicode]

EXE2BIN [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[modifier | modifier le wikicode]

EXE2BIN 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[modifier | modifier le wikicode]

Commande interne DOS, elle permet de sortir de l'interpréteur.

Utilisation[modifier | modifier le wikicode]

EXIT [/B] [code_sortie]

Options[modifier | modifier le wikicode]

/B
Sort du fichier batch sans terminer cmd.exe.
code_sortie
Code de sortie retourné (errorlevel).

Exemple[modifier | modifier le wikicode]

exit 5


Find

Introduction[modifier | modifier le wikicode]

La commande FIND permet de rechercher une chaîne de texte dans un ou plusieurs fichiers.


Syntaxe[modifier | modifier le wikicode]

FIND [/V][/C][/N][/I][/OFF[LINE]] "chaîne" [[lecteur:][chemin]nom_de_fichier.ext[ ...]]


Chemin[modifier | modifier le wikicode]

"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 | modifier le wikicode]

/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[modifier | modifier le wikicode]

FIND /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[modifier | modifier le wikicode]

Cette 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[modifier | modifier le wikicode]

Ces 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[modifier | modifier le wikicode]

FOR %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[modifier | modifier le wikicode]

Exemple sur de simples chaînes[modifier | modifier le wikicode]

FOR %%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[modifier | modifier le wikicode]

FOR %%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[modifier | modifier le wikicode]

FOR %%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[modifier | modifier le wikicode]

Ces 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[modifier | modifier le wikicode]

Le 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 que la valeur affectée à variable dépasse la valeur index de fin, la boucle s'arrête.

Exemple[modifier | modifier le wikicode]

FOR /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[modifier | modifier le wikicode]

Le principe est le même que pour les boucles sur des fichiers, mais s'applique sur les répertoires lorsque que l'ensemble est une chaine contenant des caractères génériques.

Utilisation[modifier | modifier le wikicode]

Le commutateur /D permet de rechercher des répertoires au lieu de fichiers.

FOR /D %variable IN (ensemble de répertoires) DO commande

Exemples[modifier | modifier le wikicode]

Exemple sur un ensemble de répertoires sans interprétation[modifier | modifier le wikicode]

FOR /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[modifier | modifier le wikicode]

FOR /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[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

L'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 fichiers. Si les commutateur /R et /D sont présents, la recherche récursive s'effectuera sur des noms de répertoires.

Exemples[modifier | modifier le wikicode]

Exemple sur un ensemble de répertoires sans caractère générique[modifier | modifier le wikicode]

Comme 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[modifier | modifier le wikicode]

FOR /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[modifier | modifier le wikicode]

FOR /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[modifier | modifier le wikicode]

Ces 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. A chaque itération de boucle correspond une ligne d'un fichier.

Utilisation[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

Pour 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[modifier | modifier le wikicode]

Pour 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[modifier | modifier le wikicode]

Certains 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[modifier | modifier le wikicode]

La 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=chiffres 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[modifier | modifier le wikicode]

Soit 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[modifier | modifier le wikicode]

FOR /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[modifier | modifier le wikicode]

On 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[modifier | modifier le wikicode]

FOR /F %%i IN (` commande `) do commande

A 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[modifier | modifier le wikicode]

L'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[modifier | modifier le wikicode]

Dans 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[modifier | modifier le wikicode]

FOR 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[modifier | modifier le wikicode]

L'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[modifier | modifier le wikicode]

FORMAT est une commande externe qui permet de formater un disque dur, une disquette.

Utilisation[modifier | modifier le wikicode]

FORMAT 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:

Logo Le formatage d'un disque l'initialise, et supprime les éventuelles données existantes.


Goto

Introduction[modifier | modifier le wikicode]

Commande interne DOS, elle est utilisée dans un batch pour poursuivre l'exécution au label spécifié.

Utilisation[modifier | modifier le wikicode]

GOTO label

Exemple[modifier | modifier le wikicode]

GOTO plusloin
ECHO Instruction sautée
:plusloin
ECHO Instruction interprétée

Terminer un batch ou une sous-routine[modifier | modifier le wikicode]

Pour 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[modifier | modifier le wikicode]

La commande HELP permet d'obtenir l'aide des commandes DOS

Utilisation[modifier | modifier le wikicode]

HELP

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[modifier | modifier le wikicode]

HELP cmd
HELP SET
HELP IF
HELP FOR


Hostname

Affiche le nom de l'ordinateur.


If

Introduction[modifier | modifier le wikicode]

Commande interne DOS, elle est utilisée pour exécuter une commande si une condition est vraie.

Utilisation[modifier | modifier le wikicode]

IF 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[modifier | modifier le wikicode]

IF 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[modifier | modifier le wikicode]

IF "%1" == "" (
echo syntaxe : fichier_texte fichier_binaire
exit
)
IF "%1" == "toto" (
echo le parametre est bien toto
exit
)

Condition[modifier | modifier le wikicode]

La commande IF supporte différents types de condition.

Tester le code de retour[modifier | modifier le wikicode]

Toute 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[modifier | modifier le wikicode]

IF 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[modifier | modifier le wikicode]

IF 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 de
  • LSS : 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[modifier | modifier le wikicode]

IF 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[modifier | modifier le wikicode]

Voir toutes les informations réseaux (adresses IP, DNS, etc.) :

ipconfig /all

Flusher le cache DNS :

ipconfig /flushdns


Label

Introduction[modifier | modifier le wikicode]

Un 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 | modifier le wikicode]

:label

Exemple[modifier | modifier le wikicode]

GOTO plusloin
ECHO Instruction sautée
:plusloin
ECHO Instruction interprétée


Mkdir

Introduction[modifier | modifier le wikicode]

Make Directory

Commande interne DOS, elle permet de créer un nouveau répertoire.

Utilisation[modifier | modifier le wikicode]

MKDIR chemin
MD chemin

chemin désigne le chemin incluant le nom du nouveau répertoire.

Options[modifier | modifier le wikicode]

Cette commande ne possède aucune option.

Exemples[modifier | modifier le wikicode]

mkdir c:\program\application1
md data_cache


Mkdir

Introduction[modifier | modifier le wikicode]

Make Directory

Commande interne DOS, elle permet de créer un nouveau répertoire.

Utilisation[modifier | modifier le wikicode]

MKDIR chemin
MD chemin

chemin désigne le chemin incluant le nom du nouveau répertoire.

Options[modifier | modifier le wikicode]

Cette commande ne possède aucune option.

Exemples[modifier | modifier le wikicode]

mkdir c:\program\application1
md data_cache


Mklink

MKLINK est une commande DOS qui créé 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.

  1. 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.
  2. Se connecter avec l'utilisateur administrateur.
  3. Déplacer le répertoire du profil de l'utilisateur à l'endroit voulu.
  4. 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.
  5. 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 apparaitre.
  6. S'assurer que le raccourci lui-même a les même 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[modifier | modifier le wikicode]

Move

Cette commande permet de déplacer des fichiers et renommer des répertoires.

Utilisation[modifier | modifier le wikicode]

Pour 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 | modifier le wikicode]

[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[modifier | modifier le wikicode]

Obtenir 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 :

  1. NET ACCOUNTS
  2. NET COMPUTER
  3. NET CONFIG
  4. NET CONFIG SERVER
  5. NET CONFIG WORKSTATION
  6. NET CONTINUE
  7. NET FILE
  8. NET GROUP
  9. NET HELP
  10. NET HELPMSG
  11. NET LOCALGROUP
  12. NET NAME
  13. NET PAUSE
  14. NET PRINT
  15. NET SEND
  16. NET SESSION
  17. NET SHARE
  18. NET START
  19. NET STATISTICS
  20. NET STOP
  21. NET TIME
  22. NET USE
  23. NET USER
  24. NET VIEW

Net send[modifier | modifier le wikicode]

net send envoie des messages sur le LAN. Ex :

net send 192.168.1.10 \"coucou\"

Net start[modifier | modifier le wikicode]

Permet de lancer un service. Ex :

net start apache2

Net statistics[modifier | modifier le wikicode]

Affiche des stats soit sur un serveur, soit un client. Ex :

net statistics server

Uptime :

net statistics workstation | findstr "since"

Net stop[modifier | modifier le wikicode]

Contraire de "net start". Ex :

net stop apache2

Net use[modifier | modifier le wikicode]

net 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[modifier | modifier le wikicode]

Si 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[modifier | modifier le wikicode]

Obtenir le mot de passe wifi[modifier | modifier le wikicode]

netsh wlan show profile SSID key=clear


Pause

Introduction[modifier | modifier le wikicode]

Commande 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[modifier | modifier le wikicode]

PAUSE

Exemple[modifier | modifier le wikicode]

pause


Popd

Introduction[modifier | modifier le wikicode]

Pop Directory

Commande interne DOS, elle permet de retourner au répertoire courant précédent la dernière commande pushd.

Utilisation[modifier | modifier le wikicode]

POPD

Exemple[modifier | modifier le wikicode]

REM C:\
PUSHD C:\Windows
REM C:\Windows
PUSHD E:\temp
REM E:\Temp
POPD
REM C:\Windows
POPD
REM C:\

Voir[modifier | modifier le wikicode]


Pushd

Introduction[modifier | modifier le wikicode]

Push Directory

Commande interne DOS, elle permet de modifier le répertoire courant en mémorisant les répertoires courants précédents.

Utilisation[modifier | modifier le wikicode]

PUSHD chemin

Exemple[modifier | modifier le wikicode]

REM C:\
PUSHD C:\Windows
REM C:\Windows
PUSHD E:\temp
REM E:\Temp
POPD
REM C:\Windows
POPD
REM C:\

Voir[modifier | modifier le wikicode]


Rmdir

Introduction[modifier | modifier le wikicode]

Remove Directory

Commande interne DOS, elle permet de supprimer un répertoire vide.

Utilisation[modifier | modifier le wikicode]

RMDIR options chemin
RD options chemin du repertoire

Le chemin désigne le répertoire à supprimer.

Options[modifier | modifier le wikicode]

/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[modifier | modifier le wikicode]

rmdir /S /Q c:\temp
rd c:\data\cache


Rem

Introduction[modifier | modifier le wikicode]

Remark

Commande interne DOS, elle permet d'ignorer le commentaire qui suit.

Utilisation[modifier | modifier le wikicode]

REM commentaire

Exemples[modifier | modifier le wikicode]

REM
REM Commentaire utile dans un batch

Pour ne pas afficher les lignes commentées dans la console, utiliser :

@Echo off


Replace

Rôle[modifier | modifier le wikicode]

Copie et déplace des fichiers sélectionnés.

Syntaxe[modifier | modifier le wikicode]

replace (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 | modifier le wikicode]

(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 | modifier le wikicode]

  • /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[modifier | modifier le wikicode]

Si 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[modifier | modifier le wikicode]

replace 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[modifier | modifier le wikicode]

Remove Directory

Commande interne DOS, elle permet de supprimer un répertoire vide.

Utilisation[modifier | modifier le wikicode]

RMDIR options chemin
RD options chemin du repertoire

Le chemin désigne le répertoire à supprimer.

Options[modifier | modifier le wikicode]

/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[modifier | modifier le wikicode]

rmdir /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


Runas

Pour lancer des commandes avec un autre compte que celui de la session courante.

Utilisation[modifier | modifier le wikicode]

Démarrer, exécuter (touche Windows + R) :

runas /profile /env /user:nom_machine\nom_compte commande_à_lancer

Logo Ne marche pas avec "localhost" au lieu du nom de la machine, il faut retirer ce dernier pour lancer sous un compte local.


Exemple[modifier | modifier le wikicode]

runas /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[modifier | modifier le wikicode]

Cré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 | modifier le wikicode]


Set

Introduction[modifier | modifier le wikicode]

La 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[modifier | modifier le wikicode]

Affichage de variables[modifier | modifier le wikicode]

SET [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[modifier | modifier le wikicode]

Les variables sont très utiles dans un environnement de script ou batch (un programme).

Affectation de chaînes[modifier | modifier le wikicode]

la 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

Logo 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[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

SET 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[modifier | modifier le wikicode]

Pour 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[modifier | modifier le wikicode]

Lorsqu'une console de commandes DOS est lancée, certaines variables sont déjà définies.

Variables d'information système[modifier | modifier le wikicode]

Afin 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[modifier | modifier le wikicode]

Certaines 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 | modifier le wikicode]

%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'ou le nom de commutateur). A 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[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

Il 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[modifier | modifier le wikicode]

La 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[modifier | modifier le wikicode]

SHIFT [/n]

n représente un nombre indiquant le paramètre à partir duquel le décalage des paramètres commence.

Exemple[modifier | modifier le wikicode]

Le 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.

Exemple :

pour l’exécution de l'invite de commande a partir d'un START, cela peut ce fait de deux manières

soit :

  • 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

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.


Subst

Introduction[modifier | modifier le wikicode]

La 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 | modifier le wikicode]

  1. Ajout d'une substitution : SUBST [lettre1: [lettre2:]répertoire]
  2. Suppression d'une substitution : SUBST lettre1: /D
  3. 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[modifier | modifier le wikicode]

Exemple 1[modifier | modifier le wikicode]

Scé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[modifier | modifier le wikicode]

Substitution 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[modifier | modifier le wikicode]

La commande TIME permet de modifier l'heure système, ou simplement de la lire.

Utilisation[modifier | modifier le wikicode]

TIME [/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[modifier | modifier le wikicode]

C:\>time
L'heure actuelle est :  9:57:37,70
Entrez la nouvelle heure :

Exemple[modifier | modifier le wikicode]

Lecture[modifier | modifier le wikicode]

Le 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[modifier | modifier le wikicode]

time 00:00:00

Voir aussi[modifier | modifier le wikicode]


Timeout

Introduction[modifier | modifier le wikicode]

Cette 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[modifier | modifier le wikicode]

TIMEOUT [/T] délai d'attente [/NOBREAK]


Options[modifier | modifier le wikicode]

/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[modifier | modifier le wikicode]

 TIMEOUT /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[modifier | modifier le wikicode]

Commande interne DOS, elle permet de modifier le titre de la fenêtre de l'interpréteur.

Utilisation[modifier | modifier le wikicode]

TITLE titre

Exemple[modifier | modifier le wikicode]

TITLE Ceci est ma fenêtre !


Tree

Commande Fichier Batch - TREE Affiche une carte de répertoire graphique

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


Type

Description[modifier | modifier le wikicode]

TYPE est la commande interne qui permet d'afficher le contenu des fichiers.

Utilisation[modifier | modifier le wikicode]

TYPE 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[modifier | modifier le wikicode]

Version information

Commande interne DOS, elle affiche la version de l'interpréteur.

Utilisation[modifier | modifier le wikicode]

VER

Exemple[modifier | modifier le wikicode]

C:\>VER

Microsoft Windows 2000 [Version 5.00.2195]


Vol

Introduction[modifier | modifier le wikicode]

Volume name

La commande VOL permet d'obtenir les informations de nom et numéro de série d'une partition.

Utilisation[modifier | modifier le wikicode]

VOL [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[modifier | modifier le wikicode]

VOL
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 | modifier le wikicode]

> 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[modifier | modifier le wikicode]

La commande Whoami permet d'obtenir les informations d'identification de l'utilisateur courant (« qui suis-je ? », en anglais : "Who am I ?").

Utilisation[modifier | modifier le wikicode]

Whoami [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 ?[modifier | modifier le wikicode]

WMI 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.

À faire...link={{{link}}}

Ajouter les schémas référencés dans le texte

Demande de traductionTranslation arrow.svg

Cette page nécessite une traduction.
Si vous connaissez cette langue et le sujet de la page, vous pouvez poursuivre ou corriger la traduction.


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?[modifier | modifier le wikicode]

Because 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?[modifier | modifier le wikicode]

Since 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?[modifier | modifier le wikicode]

For someone willing to develop one or many WMI providers, WMI offers many features out of the box. Here are the most important advantages:

  1. 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.
  2. .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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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?[modifier | modifier le wikicode]

From 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[modifier | modifier le wikicode]

Si 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")

Verif wmi.jpg


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 | modifier le wikicode]

  • 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.

CMD Windows.jpg

Sous Microsoft Windows XP (au moins avec Service Pack 2)[modifier | modifier le wikicode]

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 :

  • 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)[modifier | modifier le wikicode]

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 :

  • 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[modifier | modifier le wikicode]

Il 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[modifier | modifier le wikicode]

Nota : 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[modifier | modifier le wikicode]

Obtenir la clé de licence Windows[modifier | modifier le wikicode]

wmic path softwarelicensingservice get OA3xOriginalProductKey
GFDL 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.