Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Revoyons un instant la syntaxe de cette commande.
Code : Console
Citation : Image ci-dessusDIR [lecteur:] [chemin] [nom_de_fichier] [/A[[:]attributs]] [/B] [/C] [/D] [/L] [/N] [/O[[:]tri]] [/P] [/Q] [/S] [/T[[:]heure]] [/W] [/X] [/4]
Légende : en vert, le nom de la commande ; en orange : le chemin d'accès d'où vous souhaitez lancer la commande (si vous n'en mettez pas, dir le fera dans le dossier courant) ; en rouge : enfin ce qui nous intéresse, ce qui fait que dir est une commande de recherche ; en bleu : les commutateurs possibles pour cette commande.
Comme vous voyez, des commutateurs, il y en a une sacrée masse... avant de parler de cette histoire de recherche, je vais juste d'abord en éliminer quelques uns, histoire que ça soit fait.
Les commutateur /P et /S
Bon, ceux-là, vous les connaissez déjà

.
Les commutateurs /B /C /D /L /Q /W /4
Ces commutateurs sont faciles d'utilisation, vous pouvez expérimenter par vous-même leur(s) effet(s).
(A noter cependant : pour
/B : deux dossiers ("." et "..") ne sont pas listés ; pour
/D, qui a le même effet que
/W : les dossiers sont entre crochets, les fichiers ne le sont pas)
Euh... juste un truc... pourquoi "dir /c" a-t'il le même effet que "dir" tout court ??
Parce que, quand vous entrez dir, Dos met par défaut et sans vous demander votre avis le commutateur /C (c'est l'histoire de la variable d'environnement DIRCMD -voir en bas de l'image-, on en parlera dans la partie suivante). Pour
retirer un commutateur, pour qu'il ne fasse pas son effet, mettez juste un moins ("-") devant.
Ce qui donne :
Code : Console
Voilà, voilà

.
Les commutateurs /N et /X
Vous vous souvenez qu'il y a plusieurs versions de Dos... et bien, le commutateur
/X permet d'afficher une colonne supplémentaire avec les noms des fichiers et dossiers affichés selon une version antérieure... celle où il y avait encore les ~1 !! Vous pouvez donc expérimenter du coup ce que ça donne

.
Et pour
/N... essayez, rien ne change... /N est donc probablement préconfiguré ! Que faut-il donc entrer ? Et oui, vous avez tout compris :
Code : Console
Et là... vous avez le superbe affichage 100% pur premières versions, avec les noms à gauche et le ~1

.
Les commutateurs /T et /O
Mis en derniers à cause de leur syntaxe bizarre : [/O[[:]tri]] et [/T[[:]heure]].
Rassurez-vous, pareil, il y aura toujours un slash devant la lettre. Mais, grosse différence : [[:]qqchose]... il s'agit d'un commutateur avec paramètre : la commande fera son boulot, avec plus ou moins de différences suivant le commutateur, mais avec encore des variantes selon le paramètre de ce dernier.
Pour la syntaxe simplifiée, ce serait :
Code : Console | commande /caractereDuCommutateur:paramètre(s) |
Les paramètres possibles sont indiqués à côté du commutateur dans la rubrique d'aide.
Quelques exemples :
Code : Console
Affichera les répertoires avant les fichiers.
Code : Console
Affichera les répertoires avant les fichiers puis les mettra en ordre alphabétique.
Code : Console
Aura le même effet que
Code : Console
L'ordre des paramètres a donc une importance...
Vous ne pouvez utiliser le commutateur /t:paramètre que quand vous utilisez le commutateur /o avec comme paramètre D (organisation suivant la chronologie).
Voilà, voilà, on a vu les "quelques uns".
Ah... oui, OK..., il en reste combien maintenant ? Zér0 ?
Non, un

! Mais il fait déjà partie de la fonction de recherche de dir... je vais donc en parler dans pas longtemps

.
Dir est donc une commande de recherche... et une commande de recherche sert à...
rechercher ! Bien ! Rechercher quoi ? Ce qu'il y a sur votre machine, c'est à dire des fichiers ou des dossiers.
Premier truc hyper-important pour trouver quelque chose : savoir ce que l'on cherche, donc, le nom dudit fichier ou dossier.
Ainsi, pour trouver un fichier ou un dossier dans le dossier courant, il suffira d'entrer :
Code : Console | dir nomDuFichierOuDuDossier |
Exemple:
Je cherche à vérifier s'il n'y a pas un certain "fichier.txt" sur le disque C:.
Code : Console

C'est bizarre... pourtant, j'étais certain qu'il y en avait bien un sur le disque C:...
Vous l'avez deviné, il fallait rajouter le commutateur /s pour qu'il regarde dans tout le disque

, ce qu'on a appris avant est toujours valable.
Code : Console
Ah, bah le voilà, il se trouvait dans le dossier "fichiers" !
Maintenant, imaginons la situation suivante : vous vous trouvez sur un dossier très loin de la racine du disque, et vous voulez savoir où se trouve un autre fichier, cela depuis la racine du disque... Vous avez donc comme solution ceci:
Code : Console | cd \
dir fichier.extension /s |
Mais, imaginons ensuite que vous vouliez revenir sur le dossier où vous étiez avant... beaucoup de "cd" à entrer, n'est-ce-pas ?
Et bien, rassurez-vous, comme l'indique la syntaxe (et c'est le cas pour presque toutes les commandes) vous pouvez aussi entrer avec dir un chemin d'accès.
Code : Console | dir cheminDAcces\fichier.extension (+commutateurs éventuels évidemment) |
Et là, dir recherchera le fichier depuis l'endroit spécifié sans que le dossier courant ne soit modifié, faute de cd. Rappel : la racine du disque ("\") est un chemin d'accès comme un autre, un "dir \fichier.extension /s" rechercherait donc un fichier sur tout le disque depuis la racine.
Si vous voulez chercher quelque chose depuis un chemin d'accès, ne mettez pas d'espace entre le chemin d'accès et le nom du fichier : dir afficherait sinon d'abord ce qu'il y a dans le dossier spécifié par le chemin d'accès puis chercherait le fichier dans le dossier courant...
Et... mais... est ce que c'est possible de rechercher plusieurs fichiers à la fois ??
Oui, ça l'est

(et c'est d'ailleurs ce que sous-entend l'avertissement ci-dessus). En effet, rien ne vous empêche d'entrer :
Code : Console | dir fichier1 fichier2 fichier3 etc... |
Et dir recherchera tous ces fichiers là où vous l'avez spécifié

.
Eh ! Mais, attends un peu ! Si on doit séparer les noms de fichier par un espace, comment on fait pour rechercher UN fichier dont le nom contient quelques espaces ?
Bonne question

! En effet, si vous entrez :
Code : Console | dir bonjour comment ça va.txt |
Dir vous recherchera les fichiers "bonjour", "comment", "ça" et "va.txt" là où vous lui avez demandé, et non pas un seul fichier "bonjour comment ça va.txt".
Et bien, pour qu'il n'y ait pas d'ambiguïté, les guillemets sont obligatoires :
Code : Console | dir "bonjour comment ça va.txt" |
Et là, tout marchera comme sur des roulettes

.
Et pour rechercher plusieurs fichiers dans plusieurs disques durs ?
Bien

! On s'intéresse à tout il semblerait ! Je rappelle que le disque dur est une partie du chemin d'accès comme une autre. Si l'on cherche deux fichiers, par exemple "fichier.txt" et "fichier.bmp" sur les disques C: et D:, rien ne vous empêche d'écrire :
Code : Console | dir C:\fichier.txt D:\fichier.txt C:\fichier.bmp D:\fichier.bmp /s |
A noter : si j'avais entré la même chose mais sans mettre l'antislash après les disques ("dir C:fichier.txt etc...", dir rechercherait le fichier depuis l'endroit qu'il a mémorisé de ce disque (voir l'histoire du "cd /d d:" et "cd /d d:\" du chapitre 1).
Bon et bien, avant de passer à la suite, il nous reste le dernier commutateur :
/a.
Il est relativement simple d'utilisation : dir n'affichera que les fichiers portant le nom spécifié ET le ou les attribut(s) mis en paramètres (attributs possibles : D=Dossiers ; R=En lecture seule ; H=Caché ; A=En archive ; S=Système).
Ainsi, si j'entre :
Code : Console
Dir recherchera dans tout le disque courant tous les fichiers CACHES de nom fichier, d'extension .txt (mon fichier.txt d'avant ne marcherait donc pas car il n'est pas caché ; réciproquement, si fichier.txt était caché, dir ne le trouverait pas si je ne spécifiais pas "chercher les fichiers cachés"... il est donc nécessaire de spécifier quel(s) type(s) de fichier dir doit chercher).
Code : Console
Là, dir recherchera dans tout le disque courant tous les dossiers et seulement les dossiers (il exclut les fichiers) de nom dossier.
Et attention, c'est important :
Code : Console
/a: sans rien affichera tous les fichiers ou de dossiers de nom fichier, quels que soient leur(s) attribut(s).<taille valeur="ttpetit"></taille>

Ah oui d'accord... on voit soudainement dir sous un autre angle... mais, au fait, pourquoi, quand on entrait "dir" tout seul, il affichait tout ce que contenait le dossier courant ?
Parce que...
... dir comprenait qu'il fallait tout afficher, tout simplement

.
Cette idée de TOUT est contenue sous DOS dans un symbole, que vous connaissez déjà bien : il s'agit de celui-ci :
*.
Quand vous entrez donc "dir", Dos comprend automatiquement que vous vouliez dire "dir * ", ce qui veut dire "trouver puis afficher les noms de
TOUS les fichiers et dossiers présents là où on m'a demandé de chercher".
* veut donc dire tous les caractères possibles, qu'il y en ait aucun, un, deux... jusqu'à +infini...

Euh... ouais, mais... quel intérêt d'avoir un signe pareil ?
Et bien, il sert à beaucoup, beaucoup de choses : non seulement il veut dire TOUT, mais, en plus, on peut le mettre où l'on veut.
Exemples:
Code : Console
Recherchera dans le dossier courant les fichiers .txt qui ont pour nom quelque-chose-n'importe-quoi suivi de "haha" puis les affichera.
Code : Console
Cette fois-ci recherchera les fichiers ayant pour nom hihi mais ayant n'importe quelle extension.
Code : Console
Ici, recherchera tous les fichiers ayant pour nom hoho et dont l'extension comporte au moins un "t".
Code : Console
Là, recherchera n'importe quel fichier contenant au moins un "a" dans le nom.
Code : Console
Et là, dir affichera tous les dossiers contenus dans le disque courant (note : j'aurai pu me dispenser de taper le symbole * , mais c'est toujours plus lisible

) .
Enfin, ce symbole peut-être utilisé dans d'autres commandes que dir (voir chapitre suivant), d'où sa grande importance.
Bon, il ne nous reste plus qu'à voir un symbole avant de passer aux commandes complémentaires de dir.
Un autre symbole, presque aussi tordu que * , est celui-ci : ? .
* veut dire
TOUT, n'importe quoi, tout ce qui est possible, des combinaisons infinies de
0 à
+infini caractère(s).
? veut dire, quand à lui,
UN caractère, n'importe lequel, ou
Zér0 caractère. En fait, "*" équivaut en quelque sorte à "une infinité de ?".
Pour expliquer, rien de mieux que quelques exemples :
Code : Console
Recherchera dans le dossier courant les fichiers .txt dont le nom contiendra UN "c" suivi
ou non d'UN SEUL caractère (par exemple : c.txt , ca.txt, c2.txt etc...)
Code : Console
Recherchera dans le dossier courant les fichiers, ou qui n'ont pas d'extension, ou qui n'ont une extension que d'un caractère. Pour le nom, c'est long à expliquer, voir les exemples

(exemples : abc, abc.t, tabcr.m, apbnc etc...)
Code : Console
Recherchera dans le dossier courant les fichiers dont le nom contient de 0 à 4 caractères et dont l'extension contient de 0 à 3 caractères (exemples : la.png, dodo.pm, a, tab.i etc...)
Voilà voilà, fini pour les symboles bizarres... pour l'instant

, de toute manière, on aura l'occasion de les utiliser à fond dans le chapitre suivant

.
Vocabulaire : ces deux caractères (parmi d'autres) sont dits "caractères génériques"
Bien

, mais... si j'ai bien compris, dir ne permet pas de rechercher du texte, comment on fait alors ?
Ahlala... dir, c'était bien, mais on a atteint ses limites

... pour chercher du texte nous devrons passer à deux autres commandes qui sont...
...
find (
Trouver, en anglais) et
findstr (
Find String = trouver chaîne de caractères).
Commençons par find.
Citation : sous l'invite de commande : find /?FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "chaîne" [[lecteur:][chemin]nom_de_fichier[...]]
Légende : en vert, le nom de la commande, en bleu, les commutateurs possibles, en orange, l'endroit de recherche, en rouge, ce qu'il faut rechercher.
Au sujet de la syntaxe : là, vous voyez bien que les commutateurs sont placés AVANT le reste, ça veut dire qu'il faudra impérativement que vous les placiez AVANT le reste quand vous tapez votre commande.
Alors voilà, pour chercher du texte dans UN fichier, il vous suffira d'entrer :
Code : Console | find "texteARechercher" fichierOuSonCheminDAcces |
Et pour en rechercher dans plusieurs fichiers, rien ne vous empêche de marquer, comme vous l'indique dans la syntaxe ceci : "[...]" :
Code : Console | find "texteARechercher" fichier1 fichier2 fichier3 etc... |
Ah ok... mais... comment on fait pour rechercher du texte dans TOUS les fichiers d'un dossier ? On va tous les taper un par un

?
C'est une solution

, mais il y a plus simple... l'histoire de TOUT, ça ne vous rappelle rien ? * .
Code : Console | find "texteARechercher" * |
Recherchera le texte dans TOUS les fichiers du dossier courant
ET des sous-dossiers.

Ah bon ? Mais... pourquoi ?
Un nom de fichier contient en fait son chemin d'accès (et si je le mets en gros, rouge, gras, souligné c'est que c'est pour le moins important
). * voulant dire TOUT, ce symbole veut dire aussi TOUS les chemins d'accès possibles, donc TOUS les fichiers (et à l'occasion leur chemin d'accès) depuis le dossier d'où vous avez lancé la recherche.
Ah... et comment on fait pour éviter ça ?
Et bah, euh

... c'est à dire que... hmm...

... enfin...

... à vrai dire... c'est une excellente question, d'une pertinence pertinente, merci de me l'avoir posée

(à vrai dire, j'en sais rien, si un moment je trouve, je le rajouterai ici, mais en attendant... et si vous savez, faites passer le message SVP

)
Enfin bon, broum broum

bref, hum hum, comme (presque) toute commande, find possède ses propres... commutateurs

.
Les commutateurs /V /C /N /OFF[LINE]
Simples d'utilisation, aucune explication supplémentaire n'est nécessaire.
Cependant,
/OFF[LINE] est un bel exemple de commutateur présentant plusieurs caractères, ici, les crochets veulent dire que
find /OFF a le même effet que
find /OFFLINE (je sens que le /OFFLINE sera vite délaisser au profit du /OFF

).
Le commutateur /I
Si je l'ai mis à part, ce n'est pas parce qu'il est plus compliqué, c'est juste pour revenir un instant sur l'histoire de "respecter la casse".
Rappel : Dos NE respecte PAS la casse, c'est-à-dire que pour lui, une majuscule=une minuscule.
Find, quant à elle, la respecte, il sera donc nécessaire d'entrer un
/i (ou
/I, c'est la même chose) pour qu'elle n'en tienne pas compte.
Voilà, c'est revenu un court instant, un petit rappel ne fait jamais de mal

.
Euh... ouep... mais y a deux trucs qui me chiffonent... est-ce que l'on peut rechercher plusieurs chaînes de caractère dans un même ensemble de fichiers avec find ou une seule chaîne dans plusieurs dossiers ?
Non

. Et c'est là qu'interviendra
findstr.
Findstr est beaucoup plus compliquée que find... mais permet de rechercher plusieurs chaînes de caractère à la fois, et même dans plusieurs dossiers. Comment ? Avec les commutateurs
/C: et
/D:. Mais pour cela nous allons mettre plusieurs fois le même commutateur et séparer des noms de dossier par des points-virgules

!
Globalement, findstr fonctionne comme find, on mettra juste /c: devant chaque chaîne... et on rajoutera les dossiers à fouiller après.
Code : Console | findstr /c:"chaîne1" /c:"chaîne 2" etc... /d:dossier1;dossier2;dossier3... * |
Voilà, si vous avez compris find, vous avez aussi compris findstr

.
Et bien, voili, voilou, passons à autre chose

.
Allez, comme d'hab, pour finir, quelques petits trucs plus tellement dans le sujet

.
D'abord, sous Windows, essayez de créer un nouveau dossier de nom "salut ! ça va ?" ... je parie 10 contre un que vous n'y arriverez pas

.

Eh ! C'est vrai ! Il accepte pas le nom ! Comment ça se fait ?
J'imagine qu'il vous affiche ceci

:

Ces caractères ne sont pas acceptés dans les noms de fichiers et de dossiers... pour la bonne raison que / est réservé aux commutateurs, \ aux chemins d'accès, : aux disques durs, * et ? sont utilisés pour remplacer des caractères, on ne peut donc pas les mettre et pour les guillemets, vous l'avez vu pour l'histoire de "bonjour comment ça va.txt"

. Pour les autres, on les verra à un moment ou à un autre

. Votre dossier "salut ! comment ça va ?" contenant un point d'interrogation, Windows ne peut l'accepter.
Sinon, certains logiciels vous proposent d'enregistrer au format "Tous les Fichiers" (ou "All Files") . A côté, entre parenthèses, vous aurez souvent marqué : "(*.*)" . Cela veut dire que vous devez spécifier et le nom, et l'extension du fichier ; c'est-à-dire que si vous n'en mettez pas, le logiciel n'en mettra pas non plus

.
Quant au lien entre DOS et C, nous le verrons par le biais d'une autre commande : vous savez, quand vous tapez "dir /p" dans un dossier contenant beaucoup de fichier... et bien, j'attire votre attention sur cette ligne qui s'affiche forcément si l'écran se remplit :
Et bien, cette ligne peut apparaître idépendamment de dir si vous entrez :
Code : Console
(ça fait pas tilt, les C et Cplusplusseurs

?)
... pour la pause.
Et oui, en C, sous console, les commandes MS-DOS peuvent être utilisées directement par le biais de :
Code : C
(d'où l'intérêt d'un "system("pause");" en fin de programme

).
Enfin, quand vous tapez "dir", ces deux lignes s'affichent aussi :
Code : Console
Vous les affichera de même

.
Bien, et bah... voilà pour la parenthèse plus trop dans le sujet... on passe au troisième bilan.
Pour les exos, vous allez enfin avoir quelque chose de vraiment concret

.
Tout d'abord, téléchargez
ceci. Il s'agit d'un fichier zip. Dézippez-le
sur la racine.

Sur la racine ? Pourquoi ?
Enfin... pas forcément la racine, mais pas trop loin non plus... pourquoi ? Parce que ce fichier zip contient tout ce qui est nécessaire pour l'exo c'est à dire toute une arborescence de dossier allant très loin... si vous le mettez déjà loin dans le disque, le nombre de caractères pour le chemin d'accès
étant limité, vous arriverez aux limites et n'arriverez pas à le dézipper, tout simplement

.
Et oui... tout a une limite : vous pouvez essayer : amusez vous à faire des sous-dossiers de sous-dossiers de sous-dossiers etc... en donnant un long nom aux dossiers à chaque fois, et, au bout d'un moment Windows vous affichera un message d'erreur et ne pourra pas aller plus loin... .
Bref, voici votre mission, que vous acceptez bien évidemment

(les secrets indiquent la solution et la manière d'y arriver):
- 1)Sous l'invite de commande, rendez-vous dans "dossiers" (la racine de l'arborescence que vous venez de télécharger)
- 2)Avec un "dir /s", regardez un peu ce que ça donne
- 3)Zér0, tu constates que dir signale plus de 200 dossiers. Tu n'es pas dupe, tu sais que dir compte aussi tous les dossiers intermédiaires. Il te faudra trouver le vrai nombre de dossiers présents. Pour cela, j'ai placé dans chacun des dossiers un fichier d'extension .marqueur, dont j'ai malheureusement perdu le nom... ces fichiers peuvent aussi être cachés, mais pas toujours... en trouvant le nombre de fichiers .marqueur, tu auras le nombre de dossiers
.
Secret (cliquez pour afficher)
Code : Console | dir *.marqueur /s (34 marqueurs)
dir *.marqueur /A:h /s (37 marqueurs) |
OU
Code : Console
ça fait 71
- 4)Maintenant que vous connaissez le nombre de dossiers, il vous faudra en cibler quelques-uns... certains sont à supprimer (on les supprimera dans le chapitre suivant). Un dossier est à supprimer si deux conditions sont remplies:
-il contient un fichier système contenant au moins un a dans le nom
-il contient un fichier marqueur dont le premier mot est "bonjour"(en minuscules) ; il vous faudra aller dans chaque dossier et utiliser "find" et le commutateur /N (findstr est trop complexe pour ceci)
Il y a 3 dossiers à supprimer. Quels sont-ils ?
Secret (cliquez pour afficher)
yo, paf et yipee
D'abord, trouver ces fichiers système contenant un a dans le nom :
Code : Console
Il y en a 4, donc il faut trouver le fichier marqueur ne commençant pas par "bonjour" en allant dans chacun des dossiers puis en entrant :
Code : Console | find "bonjour" *.marqueur /n |
tous les fichiers .marqueur commencent par bonjour... mais un seul a ce bonjour en ligne 2, il s'agit de celui de vilain ! On ne peut donc pas l'accuser, il est innocent, ou en tout cas acquitté

.
- 5)Trouve ensuite les chemins d'accès de ces dossiers et fichiers :
-le sous-dossier rayman (il n'est ni caché ni quoi que ce soit de spécial)Secret (cliquez pour afficher)
-tous les fichiers et dossiers ayant un rapport avec "noël" (2 dossiers, 3 fichiers)Secret (cliquez pour afficher)
-enfin, affiche à l'écran tous les fichiers (contenus uniquement dans la racine "dossiers") dont le nom contient 5 caractères ou moins.
Secret (cliquez pour afficher)
- 6)Pour finir, on s'entraîne à la recherche de texte. Allez d'abord dans "fables", puis recherchez ces informations:
-à quelles lignes apparaît le mot corbeau dans "Le Corbeau et le Renard" (fichier fable.txt), attention, il apparaît au moins une fois avec une majuscule...
Secret (cliquez pour afficher)Code : Console | find "corbeau" fable.txt /i /n |
-combien de fois apparaît le mot "renard" dans la même fableSecret (cliquez pour afficher)Code : Console | find "renard" fable.txt /i /c |
-les endroits, dans l'ensemble des fables, où apparaissent les mots : "corbeau", "renard", "agneau", "cigogne", "loup", "aigle"
Secret (cliquez pour afficher)Code : Console | findstr /i "corbeau renard agneau cigogne loup aigle" * |
D'après la syntaxe, les commutateurs sont à placer avant le reste...
-combien de fois apparaîssent les chaînes "Jean de la Fontaine" et "et" dans ce groupement de fables
Secret (cliquez pour afficher)Code : Console | findstr /i /c:"Jean de la Fontaine" /c:" et " /c:" et," * |
-enfin, revenez sur le dossier parent et trouvez la commande ayant le même effet que celle juste ci-dessus
Secret (cliquez pour afficher)Code : Console | findstr /i /c:"Jean de la Fontaine" /c:" et " /c:" et," /d:fables * |
Ouf

! Pour le qcm, vu que je n'avais pas d'idée de question après le bilan et cet exo, on va travailler un peu les caractères génériques... en 4 questions où il faut surtout ne pas s'embrouiller

.