Domanda

Possiamo vedere in una directory i file ordinati per Nome in Windows Explorer.

Se provo la stessa cosa nel prompt dei comandi di Windows, ordina in base al nome in modo diverso - correttamente :

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, ...

C'è un modo per ottenere dir per ordinare in base al nome dove legge i numeri come farebbe un essere umano?

È stato utile?

Soluzione

La tua migliore opzione (se possibile) è quella di aggiungere abbastanza zeri iniziali (due, in questo caso) ai tuoi numeri più piccoli in modo che l'ordinamento esca come previsto.

Altri suggerimenti

Windows Explorer utilizza una funzione di ordinamento speciale, StrCmpLogicalW , che non è utilizzato da cmd.exe , quindi le differenze nell'output. Tuttavia, potresti scrivere il tuo programma di ordinamento con esso.

Potresti anche essere interessato alle voci di Michael Kaplan su this subject (da riquadro dei suggerimenti ).

Lui lui lui. Volete tutti conoscere la mia soluzione?

Sto usando un programma chiamato ImageMagic che converte i miei file PDF da 200 MB in JPG. Alla fine di questo lungo processo serializza tutti i file in ordine numerico ... Quindi, in pratica, la data di creazione del file aumenta leggermente di valore mentre ogni file viene scritto sul disco rigido. Pertanto, uno dei due seguenti comandi di file batch scriverà i file nell'ordine "corretto":

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

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

Pertanto il comando dir * .jpg / OD ordina il contenuto della directory in ordine crescente (creazione?) e possiamo ignorare completamente il nome del file effettivo.

Attualmente non esistono strumenti da riga di comando integrati che possono ordinare in modo naturale. Se vuoi, vota per la funzionalità per far cambiare idea a Microsoft

Questo tuttavia può essere simulato con una sostituzione regex. Su Windows puoi usare Jscript e VBS per farlo. Ma il modo più semplice è usare PowerShell. Puoi chiamarlo da cmd.exe in questo modo

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

Attualmente non esistono strumenti da riga di comando integrati che possono ordinare in modo naturale. Se vuoi, vota per la funzionalità per far cambiare idea a Microsoft

Questo tuttavia può essere simulato con una sostituzione regex. Su Windows puoi usare Jscript e VBS per farlo. Ma il modo più semplice è usare PowerShell. Puoi chiamarlo da cmd.exe in questo modo

@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

Ovviamente dovrai cambiare il numero in PadLeft (20) se i tuoi file contengono una serie più lunga di cifre

Come ordinare per nome file allo stesso modo di Windows Explorer?

È possibile trovare una soluzione batch nativa in Ordina naturalmente i file in batch se i tuoi file hanno un solo numero alla fine

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

Ovviamente dovrai cambiare il numero in PadLeft (20) se i tuoi file contengono una serie più lunga di cifre

Come ordinare per nome file allo stesso modo di Windows Explorer?

È possibile trovare una soluzione batch nativa in Ordina naturalmente i file in batch se i tuoi file hanno un solo numero alla fine

<*>

4NT / TCC / TC da JPSoft utilizza l'ordinamento naturale per impostazione predefinita; in alternativa, se hai accesso a un GNU "ordina " programma, come il strumenti Cygwin , puoi fare qualcosa come " ls -1 | / bin / sort -g " oppure " dir / b | \ cygwin \ bin \ sort -g " ;; che ti darà i nomi dei file in un ordinamento naturale.

Se sei vincolato a strumenti nativi di Windows, puoi provare Strumenti di scripting di Windows e fai qualcosa come usare un FileSystemObject per ottenere i nomi dei file e le espressioni regolari per estrarre la parte numerica dei nomi dei file da usare come chiavi in ??un oggetto Dizionario. Lascerò l'attuale codifica come un esercizio per il lettore :)

No, non c'è modo di farlo. Esplora risorse utilizza un approccio diverso per gestirlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top