(Quiero, quiero, y lo quiero todo hecho...)
Hacer eso en Batch es una locura, más que nada si se trata de un Disco duro y estuviese más o menos LLENO, por el consumo de tiempo que tardarían dichas operaciones (Listar + ordenar), no puedes ordenar natívamente por fecha de creación (Sólo de modificación), ni tampoco puedes ordenar números por el método burbuja, así que hay que hacer malabares para ordenar fechas y tamaños, esto es Batch, un "lenguaje" limitado, hay que usarlo por otros medios que consumen más tiempo.
Diréctamente yo te iría recomendando que lo hicieras en cualquier otro lenguaje, pero bueno, aquí tienes para empezar en Batch:
Método básico:
:: By Elektro H@cker
Echo Sort files by...
| MORE
Choice /C 123
IF "
%ERRORLEVEL%"
EQU "1"
(DIR /B /S /A-D /ON "*"
) IF "
%ERRORLEVEL%"
EQU "2"
(DIR /B /S /A-D /OD "*"
) IF "
%ERRORLEVEL%"
EQU "3"
(DIR /B /S /A-D /OS "*"
)
Método avanzado:
@Echo OFF
SetLocal EnableDelayedExpansion
MODE CON COLS=999 LINES=999
:: By Elektro H@cker
Echo Sort files by... | MORE
Echo [1] Path
Echo [2] Date
Echo [3] FileSize | MORE
Choice /C 123
Set "Sorting=%ERRORLEVEL%"
Echo [+] Listing files... | MORE
DIR /B /S /A-D "*" > "%TEMP%\FileList_Unsorted.tmp"
Echo [+] Sorting files... | MORE
:: Path
IF "%Sorting%" EQU "1" (
(For /F "Tokens=* usebackq" %%# in ("%TEMP%\FileList_Unsorted.tmp") Do (Echo %%#))>"%TEMP%\FileList_Sorted.tmp"
)
:: Date
IF "%Sorting%" EQU "2" (
(For /F "Tokens=* usebackq" %%# in ("%TEMP%\FileList_Unsorted.tmp") Do (
SET "Date=%%~t#"
SET "Date=!DATE:~6,4!-!DATE:~3,2!-!DATE:~0,2!"
Echo !DATE! ^| %%#
))>"%TEMP%\FileList_Sorted.tmp"
)
:: Size
IF "%Sorting%" EQU "3" (
Set /A "Bubble_MAX=0"
(For /F "Tokens=* usebackq" %%# in ("%TEMP%\FileList_Unsorted.tmp") Do (
Echo %%~z# ^| %%#
ECHO %%~z# >"%TEMP%\FileSize.tmp"
FOR %%X IN ("%TEMP%\FileSize.tmp") DO (SET /A "Number_Length=%%~zX-3")
If !Number_Length! GTR !Bubble_MAX! (Set /A "Bubble_MAX=!Number_Length!")
)))>"%TEMP%\FileList_Sorted.tmp"
:: Zero fill
(FOR /F "Tokens=1,* usebackq Delims= " %%X in ("%TEMP%\FileList_Sorted.tmp") DO (
Echo %%X >"%TEMP%\FileSize.tmp"
FOR %%X IN ("%TEMP%\FileSize.tmp") DO (SET /A "Number_Length=%%~zX-3")
IF NOT !Number_Length! EQU !Bubble_MAX! (
Set /A "Zero_Count=!bubble_Max!-!Number_Length!"
For /L %%@ in (1,1,!Zero_Count!) do (SET "Zero_Fill=0!Zero_Fill!")
SET "Number_Filled=!Zero_Fill!%%X"
Echo !Number_Filled! %%Y
SET "Zero_Fill="
) ELSE (Echo %%X %%Y)
))>"%TEMP%\FileList_Bubble_Sorted.tmp"
)
ENDLOCAL
:Show_List
Echo [+] Showing files... | MORE
(Type "%TEMP%\FileList_Bubble_Sorted.tmp" || Type "%TEMP%\FileList_Sorted.tmp") | SORT
Pause&Exit
Imagen de este último script:
Saludos