Ordenar archivos por numero de orden en cmd o batch

¿Cómo ordenar archivos de texto desde la cmd o usar algún script en batch?

Tengo los siguiente archivos de ejemplo: 1-carta.txt, 2-monitor.txt, 10-teclado.txt, 11-bocina.txt.

Al usar el comando "dir *.txt /b", me muestra en este orden: 1-carta.txt, 10-teclado.txt, 11-bocina.txt, 2-monitor. Con el comando "dir *.txt /b /o n", 10-teclado.txt, 11-bocina.txt 1-carta.txt 2-monitor.txt Probé con sort pero sigue mostrando en desorden. Lo necesito para luego moverlos a otra carpeta de manera ordenada.

1 respuesta

Respuesta

Entiendo que el orden que necesitas es el "numérico", es decir el que asumiría que lo que precede al guión es un número y que debe ordenarse según ese subcampo. Yo tampoco consigo ninguna opción de DIR que haga esa ordenación. Se me ocurre que se podrían renombrar previamente para que se iguale el número de cifras de esa parte numérica con ceros a la izquierda. Si quieres mantener el nombre original después de hacer lo que quieras (por ejemplo "moverlos a otra carpeta de manera ordenada" aunque no acabo de entender para que puede servir eso) los vuelves a renombrar. Esto podría servirte:

@echo off
Setlocal EnableDelayedExpansion
cd \Carpeta prueba
for /f "tokens=1,2* delims=-" %%a in ('dir /b /on *.txt') do (if %%a lss 10 ren %%a-%%b 0%%a-%%b)
dir /b /on *.txt
pause
for /f "tokens=1,2* delims=-" %%a in ('dir /b /on *.txt') do (
set /a num=%%a
if %%a lss 10 ren %%a-%%b !num!-%%b
)
dir /b /on *.txt

Donde dice "Carpeta prueba" deberías poner el nombre de la carpeta que contiene los archivos. El renombrado de ese ejemplo solo prevé números menores que 100, es decir que renombra de 0... 9 a 00... 09. Si hubiera que contemplar valores menores que 1000 habría que retocar los IF de los DO para contemplar 0... 9 a 000... 009 y 10... 99 a 010... 099 ( y así sucesivamente). He incluido dos DIR después de cada renombrado para ver el efecto. Donde está el PAUSE debería figurar la acción que quieres para cada archivo (el movimiento ordenado) aunque tendrías que incluirlo en el bucle DO de un FOR similar (sin TOKENS ni DELIMS).

Ya me dirás que te parece esta solución y si te sirve o no.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas