2012-03-27 6 views
8

Ich möchte eine Windows-Batch-Datei erstellen, die alle leeren Unterverzeichnisse auflistet, die im Benutzer angegebenen Stammverzeichnis vorhanden sind.Wie listet man alle leeren Verzeichnisse mit Windows Batch-Datei auf?

Kann jemand in Bezug auf das gleiche helfen?

+0

Überprüfen Sie diese Diskussion: ["So listen Sie leere Verzeichnisse auf"] (http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/eec723b8096005b5/6416b835f5fca5d1?pli=1) –

+0

Ich habe festgestellt, dass es ein Tool namens [MarkEmptyDirs] (https://code.google.com/p/markemptydirs/) gibt. Hier ist die Beispielverwendungssyntax: MarkEmptyDirs.exe -d -v C: \ Some \ Dir –

Antwort

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

Die obige Lösung ignoriert versteckte Ordner. Mir wurde auch gesagt, dass die Verwendung der beiden Optionen/D und/R mit FOR fehlerhaft ist, obwohl ich nie ein Problem damit hatte.


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

Die zweite Lösung, die D/R FOR/vermeidet werden versteckte Ordner enthalten. Aber ich glaube, es kann fehlschlagen, wenn Ordnernamen Unicode enthalten.

+0

Was ist [dir/a/b "%% ~ fA" 2> nul | findstr "^"> nul] das heißt? Ich verstehe nicht, warum du versucht hast, das Zeichen "^" herauszufinden? –

+2

@WillHuang - Ich suche nicht nach dem '^' Zeichen, es ist eigentlich ein primitiver regulärer Ausdruck, der zu jeder Zeile passt. Das Zeichen^steht für den Anfang einer Zeile. Der '||' -Operator führt das 'echo %% ~ fA 'nur bedingt aus, wenn der FINDSTR fehlgeschlagen ist, dh wenn keine Zeilen gefunden wurden, was bedeutet, dass das Verzeichnis leer ist. – dbenham

+0

Ich verstehe. Ich verstehe jetzt. Danke für das Teilen! :) –

Verwandte Themen