Pregunta El listado de directorios es lento cuando se hace en un script por lotes


Hola miembros de StackOverflow!

Estoy tratando de ejecutar el siguiente comando:

REM the below line lists the folder names that are to be read
FOR /F "TOKENS=* DELIMS=" %%d in (%start_dir%\folder_list.txt) DO (
    ECHO Entering into: %%d Directory
    REM The below line lists the folders and all of it's subfolders. It than outputs it to a file.

        FOR /F "TOKENS=* DELIMS=" %%e in ('DIR /s "%work_dir%\%%d"') DO (
           ECHO %%e>>%start_dir%\tmp_folder\%%d.size
        )
)

El código anterior funciona.

Aquí está el problema: si tengo una carpeta que tiene solo unos pocos GB de tamaño, está bien.

Si tengo una carpeta que está por encima de 100 GB, el script tardará aproximadamente una hora en generar el comando DIR / S >> %% d.

Cuando realizo una ejecución en una carpeta individual de aproximadamente 150 GB: Dir / s "150GB_Folder" >> dir_ouput_file.txt Se completa en aproximadamente 6-10 segundos.

Mi pregunta es: ¿Por qué tarda una hora en emitir el DIR /S>>whatever.txt desde un script y solo toma unos segundos cuando no está en un script?

¡Gracias de antemano!


5
2017-09-19 20:45


origen


Respuestas:


Es un error en for donde el análisis de un gran número de líneas con un comando provoca grandes retrasos.
La solución es crear un archivo con la información y luego leer el archivo.

REM the below line lists the folder names that are to be read
FOR /F "TOKENS=* DELIMS=" %%d in (%start_dir%\folder_list.txt) DO (
    ECHO Entering into: %%d Directory
    REM The below line lists the folders and all of it's subfolders. It than outputs it to a file.

DIR /s "%work_dir%\%%d" >%temp%\temp.tmp

        FOR /F "TOKENS=* DELIMS=" %%e in (%temp%\temp.tmp) DO (
           ECHO %%e>>%start_dir%\tmp_folder\%%d.size
        )
del %temp%\temp.tmp
)

8
2017-09-20 01:57