# DOS/Introduction

Commandes DOS :
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

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

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

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

### La syntaxe générale

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 :

### Les lettres de lecteur

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

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 :

### Le répertoire contextuel courant

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

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 :
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 :
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 & :
Enfin, il est possible de rediriger une commande vers NUL au lieu d'un fichier pour simplement masquer l'affichage de la commande :

## Enchaîner les commandes

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 :
* && pour enchaîner les commandes seulement si la commande qui précède ne retourne pas d'erreur. Exemple :
* || pour enchaîner les commandes seulement si la commande qui précède retourne une erreur. Exemple :

## Grouper les commandes

Les parenthèses permettent de grouper les commandes, afin par exemple de rediriger leurs sorties de la même manière. Exemple :

## Caractères spéciaux

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

## Masquage du retour de commande

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.
Le @ masque la commande ECHO OFF, et la commande masque toutes les suivantes.

## Noms de fichier spéciaux

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

La plupart des commandes acceptent le paramètre /? pour afficher l'aide sur la commande (rappel de syntaxe, paramètres et options).
Exemple :
Il est également possible d'utiliser la commande help suivie du nom de la commande à documenter.
Exemple :

## Boucle

Afficher une séquence :
Déplacer des fichiers selon leurs noms :

## Liste alphabétique des commandes

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