2008-10-28 9 views
2

Nous pouvons voir dans un répertoire les fichiers classés par nom dans l'Explorateur Windows.Commande Windows 'dir', trier par nom ET <something>

Si je tente la même chose en MSDOS il ordonne par son nom différemment - correctement:

dir *.jpg /ON /B 

cubierta.jpg 
pag00.jpg 
pag06.jpg 
pag08.jpg 
pag09.jpg 
pag100.jpg 
pag101.jpg 
pag102.jpg 
pag103.jpg 
pag104.jpg 
pag105.jpg 
pag106.jpg 
pag107.jpg 
pag108.jpg 
pag109.jpg 
pag11.jpg, etc, etc, etc, ... 

Y at-il un moyen d'obtenir MSDOS à l'ordre par nom où il lit les chiffres comme un être humain ferait? Merci!

+0

Jeff Atwood a discuté de ceci dans un article de blog ici: http://www.codinghorror.com/blog/archives/001018.html –

+0

Ne fermez pas ceci comme n'étant pas une question de programmation parce qu'il est. – Keng

+0

@JonLimjap Le lien redirige vers la page principale du blog de Jeff ?! – steenhulthin

Répondre

6

Votre meilleure option (si possible) est d'ajouter suffisamment de zéros en tête (deux, dans ce cas) à vos plus petits nombres pour que le tri sorte comme prévu.

+1

Si je ne m'attends pas à devoir traiter des fichiers dans l'ordre, je remplis de 1 à 4 zéros ou je les utilise un horodatage complet au format UTC, 20081028143531. Il s'agit d'un * vieux * tour datant de la fin des années 70 ou du début des années 80. Peut-être avant cela ... –

-1

Non, il n'y a aucun moyen de le faire. Windows Explorer utilise une approche différente pour gérer cela.

3

Windows Explorer utilise une fonction de tri spéciale, StrCmpLogicalW, qui n'est pas utilisée par cmd.exe, d'où les différences dans la sortie. Cependant, vous pourriez écrire votre propre programme de tri.

Vous pourriez également être intéressé par les entrées de Michael Kaplan sur thissubject (d'après Raymond Chen's suggestion box).

-1

4NT/TCC/TC de JPSoft utilisez l'ordre de tri naturel par défaut; alternativement, si vous avez accès à un programme de "tri" GNU, comme le Cygwin tools, vous pouvez faire quelque chose comme "ls -1 |/bin/sort -g" ou "dir/b | \ cygwin \ bin \ sort -g "; cela vous donnera les noms de fichiers dans l'ordre de tri naturel. Si vous êtes contraint aux outils qui sont natifs à Windows, vous pouvez essayer le Windows Scripting tools et faire quelque chose comme utiliser un FileSystemObject pour obtenir les noms de fichiers, et des expressions régulières pour extraire la partie numérique des noms de fichiers à utiliser comme clés dans un Objet du dictionnaire. Je vais laisser le codage actuel comme un exercice au lecteur :)

1

He he he. Voulez-vous tous connaître ma solution? J'utilise un programme appelé ImageMagic qui convertit mes fichiers PDF de 200 Mo en JPG. À la fin du long processus, il sérialise tous les fichiers dans l'ordre numérique ... Donc, fondamentalement, la date de création du fichier augmente légèrement en valeur que chaque fichier est en cours d'écriture sur le disque dur. Ainsi, l'une des deux commandes de fichier de commandes suivant écrire les fichiers dans un ordre « correct »:

dir *.jpg /ODN /B > files.txt 

for /f "tokens=*" %%a in ('dir *.jpg /ODN /B') do (
    echo ^<page^>%%a^</page^> >>pages.xml.fragment 
) 

Ainsi les dir * commande .jpg/OD commandes le contenu du répertoire par ordre croissant (création?) Date et nous pouvons complètement ignorer le nom du fichier.

+2

Je suis assez sûr que la date de dernière modification (pas la date de création) est utilisée pour 'dir/od'. Pour la date de création, vous avez besoin de 'dir/tc/od'. –

Questions connexes