2012-03-27 13 views
8

Quiero crear un archivo por lotes de Windows que liste todos los subdirectorios vacíos presentes en el directorio raíz especificado por el usuario.¿Cómo enumerar todos los directorios vacíos usando el archivo por lotes de Windows?

¿Alguien puede ayudar con lo mismo?

+0

Consulte esta discusión: ["Cómo enumerar los directorios vacíos"] (http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/eec723b8096005b5/6416b835f5fca5d1?pli=1) –

+0

Se descubrió que hay una herramienta llamada [MarkEmptyDirs] (https://code.google.com/p/markemptydirs/). Aquí está la sintaxis de uso de muestra: MarkEmptyDirs.exe -d -v C: \ Some \ Dir –

Respuesta

11
@echo off 
for /d /r %1 %%A in (.) do (
    dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA 
) 

La solución anterior ignora las carpetas ocultas. También me han dicho que usar las opciones/D y/R con FOR está dañado, aunque nunca he tenido un problema con él.


@echo off 
dir /a /b %1 2>nul | findstr "^" >nul || echo %%~fA 
for /f "eol=: delims=" %%A in ('dir /s /ad /b %1') do (
    dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA 
) 

La segunda solución que evita DE/D/R incluirá carpetas ocultos. Pero creo que puede fallar si los nombres de las carpetas contienen Unicode.

+0

¿Qué es [dir/a/b "%% ~ fA" 2> nul | findstr "^"> nul] esto significa? No entiendo por qué trataste de averiguar el carácter "^". –

+2

@WillHuang - No estoy buscando el caracter '^', en realidad es una expresión regular primitiva que coincidirá con cualquier línea. El caracter '^' representa el comienzo de una línea. El operador '||' ejecuta condicionalmente el 'echo %% ~ fA' solo si el FINDSTR falló, que es cuando no se encontraron líneas, lo que significa que el directorio está vacío. – dbenham

+0

Ya veo. Entiendo ahora. ¡Gracias por compartir! :) –

Cuestiones relacionadas