Pregunta

Podemos ver en un directorio los archivos ordenados por Nombre en el Explorador de Windows.

Si intento lo mismo en el indicador de comando de Windows, ordena por nombre de forma diferente - correctamente :

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

¿Hay una manera de hacer que dir ordene por Nombre donde lea los números como lo haría un humano?

¿Fue útil?

Solución

Su mejor opción (si es posible) es agregar suficientes ceros iniciales (dos, en este caso) a sus números más pequeños para que la clasificación salga como se espera.

Otros consejos

Windows Explorer usa una función de clasificación especial, StrCmpLogicalW , que No es usado por cmd.exe , por lo tanto, las diferencias en la salida. Sin embargo, podrías escribir tu propio programa de clasificación con él.

También te pueden interesar las entradas de Michael Kaplan en esto asunto (de Raymond Chen's buzón de sugerencias ).

él él él. ¿Todos quieren saber mi solución?

Estoy usando un programa llamado ImageMagic que convierte mis archivos PDF de 200MB a JPG. Al final del largo proceso, serializa todos los archivos en orden numérico ... Entonces, básicamente, la fecha de creación del archivo aumenta ligeramente de valor a medida que se escribe cada archivo en el disco duro. Por lo tanto, cualquiera de los siguientes dos comandos de archivo por lotes escribirá los archivos en el orden 'correcto':

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

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

Por lo tanto, el comando dir * .jpg / OD ordena el contenido del directorio por fecha ascendente (¿creación?), y podemos ignorar completamente el nombre real del archivo.

Actualmente no hay herramientas de línea de comandos integradas que puedan clasificarse de forma natural. Si lo desea, vote por la función para que Microsoft cambie de opinión

Sin embargo, esto puede simularse con un reemplazo de expresiones regulares. En Windows puedes usar Jscript y VBS para hacer eso. Pero la forma más fácil es usar powershell. Puedes llamarlo desde cmd.exe como este

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

Actualmente no hay herramientas de línea de comandos integradas que puedan clasificarse de forma natural. Si lo desea, vote por la función para que Microsoft cambie de opinión

Sin embargo, esto puede simularse con un reemplazo de expresiones regulares. En Windows puedes usar Jscript y VBS para hacer eso. Pero la forma más fácil es usar powershell. Puedes llamarlo desde cmd.exe como este

@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

Por supuesto, deberá cambiar el número en PadLeft (20) si sus archivos contienen una serie de dígitos más larga

¿Cómo ordenar por nombre de archivo de la misma forma que lo hace el Explorador de Windows?

Una solución de lote nativa se puede encontrar en Ordene naturalmente los archivos en lotes si sus archivos tienen solo un número al final

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

Por supuesto, deberá cambiar el número en PadLeft (20) si sus archivos contienen una serie de dígitos más larga

¿Cómo ordenar por nombre de archivo de la misma forma que lo hace el Explorador de Windows?

Una solución de lote nativa se puede encontrar en Ordene naturalmente los archivos en lotes si sus archivos tienen solo un número al final

<*>

4NT / TCC / TC de JPSoft utiliza el orden natural de forma predeterminada; alternativamente, si tiene acceso a un GNU " sort " programa, como las herramientas de Cygwin , puede hacer algo como " ls -1 | / bin / sort -g " o " dir / b | \ cygwin \ bin \ sort -g " ;; eso te dará los nombres de archivo en orden natural.

Si está limitado a las herramientas que son nativas de Windows, puede probar el Windows Scripting tools y haga algo como usar un FileSystemObject para obtener los nombres de archivo y expresiones regulares para extraer la parte numérica de los nombres de archivo para usar como claves en un objeto de Diccionario. Dejaré la codificación real como un ejercicio para el lector :)

No, no hay manera de hacer esto. El Explorador de Windows usa un enfoque diferente para manejar esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top