Question

Nous pouvons voir dans un répertoire les fichiers classés par nom dans l'Explorateur Windows.

Si j'essaie la même chose dans l'invite de commande Windows, il ordonne différemment par son nom - 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, ...

Existe-t-il un moyen d'obtenir que dir soit commandé par nom où il lit les nombres comme le ferait un humain?

Était-ce utile?

La solution

Votre meilleure option (si possible) consiste à ajouter suffisamment de zéros à gauche (deux dans ce cas) à vos nombres plus petits pour que le tri sorte comme prévu.

Autres conseils

L'Explorateur Windows utilise une fonction de tri spéciale, StrCmpLogicalW , qui cmd.exe n’est pas utilisé, d’où les différences dans le résultat. Vous pouvez cependant écrire votre propre programme de tri.

Vous pouvez également être intéressé par les entrées de Michael Kaplan dans this sujet (extrait de boîte à suggestions ).

Il il il il. Voulez-vous tous connaître ma solution?

J'utilise un programme appelé ImageMagic qui convertit mes fichiers PDF de 200 Mo au format JPG. À la fin du processus, il sérialise tous les fichiers par ordre numérique ... Donc, en gros, la date de création du fichier augmente légèrement lorsque chaque fichier est en cours d'écriture sur le disque dur. Ainsi, l’une des deux commandes de fichier de commandes suivantes écrira les fichiers dans le bon ordre:

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

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

Ainsi, la commande dir * .jpg / OD ordonne le contenu du répertoire par date ascendante (création?) et nous pouvons ignorer complètement le nom de fichier réel.

Actuellement, aucun outil de ligne de commande intégré ne permet de trier naturellement. Si vous le souhaitez, veuillez voter pour la fonctionnalité afin que Microsoft change d'idée

.

Ceci peut toutefois être simulé avec un remplacement de regex. Sous Windows, vous pouvez utiliser JScript et VBS pour le faire. Mais le moyen le plus simple est d'utiliser Powershell. Vous pouvez l’appeler à partir de cmd.exe comme ceci

powershell -Command "(Get-ChildItem | Sort-Object { [regex]::Replace(

Actuellement, aucun outil de ligne de commande intégré ne permet de trier naturellement. Si vous le souhaitez, veuillez voter pour la fonctionnalité afin que Microsoft change d'idée

.

Ceci peut toutefois être simulé avec un remplacement de regex. Sous Windows, vous pouvez utiliser JScript et VBS pour le faire. Mais le moyen le plus simple est d'utiliser Powershell. Vous pouvez l’appeler à partir de cmd.exe comme ceci

@echo off
setlocal enabledelayedexpansion
for %%a in (*.txt) do (
    set num=00000000000000000000%%a
    set num=!num:~-20!
    set $!num!=%%a
)
for /f "tokens=1,* delims==" %%a in ('set <*>') do echo %%b

Bien sûr, vous devrez modifier le numéro dans PadLeft (20) si vos fichiers contiennent une série de chiffres plus longue

Comment trier par nom de fichier de la même manière que l'explorateur Windows?

Vous pouvez trouver une solution batch native dans Trier naturellement les fichiers par lot si vos fichiers ne comportent qu'un seul numéro à la fin

<*>.Name, '\d+', { $args[0].Value.PadLeft(20) }) }).Name"

Bien sûr, vous devrez modifier le numéro dans PadLeft (20) si vos fichiers contiennent une série de chiffres plus longue

Comment trier par nom de fichier de la même manière que l'explorateur Windows?

Vous pouvez trouver une solution batch native dans Trier naturellement les fichiers par lot si vos fichiers ne comportent qu'un seul numéro à la fin

<*>

4NT / TCC / TC de JPSoft utilisent l'ordre de tri naturel par défaut; alternativement, si vous avez accès à un fichier GNU " sort " programme, tel que les outils Cygwin , 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 limité aux outils natifs de Windows, vous pouvez essayer Outils de script Windows et utilisez un objet FileSystemObject pour obtenir les noms de fichier et des expressions régulières pour extraire la partie numérique des noms de fichier à utiliser comme clés dans un objet Dictionary. Je laisserai au lecteur le codage réel comme exercice:)

Non, il n'y a pas moyen de faire ça. L’explorateur Windows utilise une approche différente pour gérer cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top