Il existe deux caractères générqiues dans les systèmes Windows: le * (étoile ou astérisque) et le ? (point d'interrogation). Ils sont fort utiles pour créer des masques qui permettent d'affecter plusieurs fichiers avec une seule commande.
Le ? est un joker qui représente un et un seul caractère, pas plus, pas moins. Par exemple, si j'écris:
del allo?a.txt
j'effacerai d'un seul coup tous les fichiers dont le nom commence par allo, suivi d'un caractère, suivi d'un a, puis de l'extension .txt. Donc les fichiers allo1a.txt, allo2a.txt et alloha.txt seraient effacés, mais pas allo12a.txt, allosheila.txt ni alloa.txt. En effet, allo12a.txt a deux caractères après le allo et le point d'interrogation n'en remplace qu'un. allosheila.txt a 5 caractères après le allo et alloa.txt n'en a aucun, donc ils ne correspondent pas à allo?a.txt non plus.
Autre exemple:
copy ?1234.doc c:\fichiers1234
Les fichiers débutant par un caractère, suivi de 1234.doc seront copiés dans le dossier c:\fichiers1234. Donc 01234.doc et a1234.doc, mais pas texte1234.doc ni 1234.doc.
Par contre, il existe un seul cas d'exception pour le ? : lorsqu'il est à la fin du nom, juste avant l'extension, il peut remplacer 0 caractère. Par exemple, ceci:
del allo?.xls
effacera allo1.xls, alloc.xls et allo.xls. On peut aussi dire qu'un ? à la fin du nom peut être ignoré, ou peut remplacer un seul caractère.
Et donc, ceci:
del allo???.jpg
effacera allo.jpg, allo1.jpg, allo12.jpg et allo123.jpg, mais pas allo1234.jpg!
Le * est un joker plus puissant qui représente 0, 1 ou plusieurs caractères simultanément. Lorsqu'on voit un * dans une commande, on sait qu'on pourrait le remplacer par n'importe quelle suite de caractères (incluant la chaîne vide, aucun caractère!) et affecter d'un seul coup tout un tas de fichiers. Par exemple, si j'écris:
del allo*.txt
j'effacerai alors d'un seul coup tous les fichiers dont le nom commence par allo, suivi de n'importe quoi (un caractères, plusieurs caractères ou même aucun caractère), puis suivi de l'extension .txt. Donc les fichiers allo1.txt, allo2.txt, alloc.txt, allo12.txt, allotoi.txt et allo.txt seraient tous effacés! Les 3 premiers parce que l'étoile remplace un caractère, les deux suivants parce qu'elle en remplace plusieurs et le dernier parce qu'elle n'en remplace aucun.
Lorsque l'on utilise un nom de fichier qui contient des caractères génériques (*, ?), on appelle ce nom un masque. En effet, il ne représente pas un fichier précis mais une multitude de fichiers possibles. C'est un peu comme un patron de noms de fichiers.
Partout où on peut utiliser un nom de fichier "source" à une commande, on peut utiliser un masque à la place. Par exemple, dans les commandes del, copy, move, dir, type et bien plus encore!
Par contre, là où une commande s'attend à recevoir un chemin vers un répertoire de destination (comme le deuxième paramètre de copy ou encore dans le cas de cd), le masque ne peut pas être utilisé parce qu'il créerait une ambiguïté: si je fais cd a*, où est-ce que je suis supposé me retrouver au juste?
Il est permis d'utiliser plusieurs jokers à l'intérieur d'un même masque pour affecter ultimement tous les fichiers voulus mais aucun autre. Par exemple, on peut utiliser à la fois ? et *:
del allo?.*
On effacera alors tous les fichiers dont le nom commence par allo, suivi d'un seul caractère, suivi d'un point et dont l'extension peut être n'importe quoi.
On peut utiliser plusieurs *:
copy a*.* c:\fichiers_a
Ceci copiera tous les fichiers dont le nom commence par a, peu importe l'extension, dans le dossier c:\fichiers_a. Notez que le fichier a.txt serait copié dans l'opération (puisque l'étoile peut remplacer 0 caractère).
Si on place l'étoile au début du nom, on peut trouver les fichiers dont le nom finit par la lettre voulue:
move *e.* c:\fichiers_e
On déplacera ici tous les fichiers dont le nom finit par un e, peu importe l'extension, dans le dossier c:\fichiers_e. Notez qu'un fichier e.txt serait déplacé par l'opération (puisque l'étoile peut remplacer 0 caractère).
Et le masque le plus général possible, *.* représente tous les fichiers (peu importe leur nom, peu importe leur extension.