elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Batch para listar archivos de una unidad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Batch para listar archivos de una unidad  (Leído 5,102 veces)
lmgmonzon

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Batch para listar archivos de una unidad
« en: 12 Marzo 2013, 10:06 am »

Buenos días, estoy un poco pez en programción y necesitaría un script que me permitiera crear un listado de todos los archivos de una unidad donde apareciera la ruta completa, la fecha de creación y el tamaño del archivo, y pudiera ordenarlos según estos tres criterios.

Muchas gracias por todo,
Un saludo.


En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Batch para listar archivos de una unidad
« Respuesta #1 en: 12 Marzo 2013, 13:12 pm »

Simplemente con el comando DIR ya puedes solucionarlo, pues tiene la opción /O para ordenar según el criterio que quieras y la opción /S te permitirá recorrer todos los subdirectorios desde el punto de donde se ejecute.

Para más ayuda teclea en la consola:  dir /?


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: Batch para listar archivos de una unidad
« Respuesta #2 en: 12 Marzo 2013, 14:00 pm »

(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:
Código
  1. @Echo OFF
  2.  
  3. :: By Elektro H@cker
  4.  
  5. Echo Sort files by...       | MORE
  6. Echo [1] Full path
  7. Echo [2] Modified date
  8. Echo [3] FileSize     | MORE
  9.  
  10. Choice /C 123
  11.  
  12. IF "%ERRORLEVEL%" EQU "1" (DIR /B /S /A-D /ON "*")
  13. IF "%ERRORLEVEL%" EQU "2" (DIR /B /S /A-D /OD "*")
  14. IF "%ERRORLEVEL%" EQU "3" (DIR /B /S /A-D /OS "*")
  15.  
  16. Pause&Exit

Método avanzado:

Código:
@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
« Última modificación: 12 Marzo 2013, 14:04 pm por EleKtro H@cker » En línea



lmgmonzon

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Batch para listar archivos de una unidad
« Respuesta #3 en: 12 Marzo 2013, 17:02 pm »

Muchas gracias por la ayuda.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines