Pourquoi la commande MOVE dans DOS traite-t-elle les modèles génériques de manière étrange dans ce cas?

1

J'utilise la commande "move" avec un motif générique dans l'invite CMD sous Windows 7.

Dans mon répertoire source, j'ai les fichiers suivants:

 movie1.avi
 movie1.avi_metadata
 movie2.avi
 movie2.avi_metadata

Si je tape la commande move source\*.avi dest, les quatre fichiers seront déplacés, même si, selon moi, seuls les deux *.avifichiers sont déplacés , pas les *.avi_metadatafichiers.

Comme prévu, move source\*.a destet move source\*.av destne déplacez aucun fichier. Cependant, lorsque la longueur de l'extension pour le motif générique est de 3 caractères, toutes les extensions commençant par ces trois premiers caractères seront déplacées.

S'agit-il d'un bogue dans la commande "move" ou d'un comportement attendu et est-il documenté n'importe où?


Edit: John Watts note que ceci est probablement fait pour "abréger" les noms de fichiers.

Est-il possible alors de faire en sorte que les commandes de l'interpréteur CMD ne fonctionnent que sur les noms de fichiers longs et ignorent les noms de fichiers courts?

Adisak
la source
2
Windows 7 crée-t-il toujours des noms 8.3? Parce que ceux-ci correspondraient à * .avi pour les quatre fichiers.
Ah ... les noms de fichiers courts ... tu me mords au cul. Merci John. BTW, je me demande qui a baissé la note de cela. C'est une question légitime.
Adisak
Il appartient probablement au superutilisateur. Il est plus approprié de le déplacer que de voter à la baisse, mais ils n'auront peut-être pas assez de représentants pour cela.
Eh bien, c'est certainement quelque chose qui affecte la programmation BATCH. Je ne sais même pas comment le déplacer sur un autre site StackExchange :-(
Adisak
2
vous pouvez désactiver la création de noms de fichiers courts sur ntfs en utilisant fsutil: fsutil behavior set disable8dot3 1. Cela n'affecte que les fichiers créés après la modification.
wmz

Réponses:

2

Vous pouvez diriger DIR / B via FINDSTR pour filtrer les fichiers indésirables. Vous pouvez traiter ces résultats en utilisant FOR / F.

for /f "eol=: delims=" %F in ('dir /b /a-d source\*.avi^|findstr /lie .avi') do move "source\%F" dest
Dbenham
la source