2012-03-27 11 views
8

Chcę utworzyć plik wsadowy systemu Windows, który wyszczególnia wszystkie puste podkatalogi znajdujące się w katalogu określonym przez użytkownika.Jak wyświetlić listę wszystkich pustych katalogów przy użyciu pliku wsadowego Windows?

Czy ktoś może pomóc w odniesieniu do tego samego?

+0

Sprawdź ta dyskusja: [ "Jak listy pustych katalogów"] (http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/eec723b8096005b5/6416b835f5fca5d1?pli=1) –

+0

Stwierdzono, że istnieją narzędzia o nazwie [MarkEmptyDirs] (https://code.google.com/p/markemptydirs/). Oto przykładowa składnia użycia: MarkEmptyDirs.exe -d -v C: \ Some \ Dir –

Odpowiedz

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

Powyższe rozwiązanie ignoruje ukryte foldery. Powiedziano mi również, że używanie opcji/D i/R z FOR jest błędne, chociaż nigdy nie miałem z tym problemu.


@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 
) 

The 2nd rozwiązaniem, które pozwala uniknąć O/D/R będzie zawierać ukryte foldery. Ale wierzę, że może zawieść, jeśli nazwy folderów zawierają kod Unicode.

+0

Co to jest [dir/a/b "%% ~ fA" 2> nul | findstr "^"> nul] to znaczy? Nie rozumiem, dlaczego próbowałaś odkryć znak "^"? –

+2

@WillHuang - Nie szukam znaku '^', jest to prymitywne wyrażenie regularne pasujące do dowolnej linii. Znak '^' reprezentuje początek linii. Operator '||' warunkowo wykonuje 'echo %% ~ fA' tylko wtedy, gdy zawiodła funkcja FINDSTR, co oznacza, że ​​nie znaleziono linii, co oznacza, że ​​katalog jest pusty. – dbenham

+0

Rozumiem. Teraz rozumiem. Dzięki za udostępnienie! :) –

Powiązane problemy