2012-03-27 11 views
8

Voglio creare un file batch di Windows che elenca tutte le sottodirectory vuote presenti nella directory radice specificata dall'utente.Come elencare tutte le directory vuote usando il file batch di Windows?

Qualcuno può aiutare per quanto riguarda lo stesso?

+0

Controlla questa discussione: ["Come elencare le directory vuote"] (http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/eec723b8096005b5/6416b835f5fca5d1?pli=1) –

+0

Sono stato scoperto che esiste un tool chiamato [MarkEmptyDirs] (https://code.google.com/p/markemptydirs/). Ecco la sintassi di utilizzo di esempio: MarkEmptyDirs.exe -d -v C: \ Some \ Dir –

risposta

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

La soluzione precedente ignora le cartelle nascoste. Mi è stato anche detto che l'uso di entrambe le opzioni/D e/R con FOR è stato risolto, anche se non ho mai avuto un problema con esso.


@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 seconda soluzione che evita FOR/D/R include file nascosti. Ma credo che possa fallire se i nomi delle cartelle contengono Unicode.

+0

Cosa c'è [dir/a/b "%% ~ fA" 2> nul | findstr "^"> nul] questo significa? Non capisco perché hai cercato di scoprire il carattere "^"? –

+2

@WillHuang - Non sto cercando il carattere '^', è in realtà un'espressione regolare primitiva che si adatta a qualsiasi riga. Il carattere '^' rappresenta l'inizio di una linea. L'operatore '||' esegue in modo condizionale 'echo %% ~ fA' solo se FINDSTR non è riuscito, ovvero quando non sono state trovate linee, il che significa che la directory è vuota. – dbenham

+0

Capisco. Ora capisco. Grazie per la condivisione! :) –

Problemi correlati