Czy w systemie Windows można przesyłać listę plików do RMDIR?

9

Piszę plik wsadowy dla wiersza polecenia systemu Windows, aby usunąć wszystkie katalogi pasujące do określonego wyrażenia.

Najpierw używam DIRdo zwrócenia prostej listy katalogów pasujących do wyrażenia. Chciałbym potokować każdy wiersz danych wyjściowych do polecenia RMDIR, tak jak to:

DIR *.delete /A:D /B /S | RMDIR /S /Q

Jednak powyższe polecenie wydaje się nie działać. Nie do końca rozumiem, dlaczego to nie działa i byłbym wdzięczny każdemu, kto może wyjaśnić.

użytkownik78755
źródło

Odpowiedzi:

5

W pliku wsadowym możesz użyć następujących elementów:

FOR /f "tokens=*" %%a in ('dir *.delete /A:D /B /S') DO RMDIR /S /Q %%a

Ta FORkomenda używa pętli do wyświetlania danych wyjściowych danej komendy (w tym przypadku dir *.delete /A:D /B /Sdla każdego zwróconego elementu uruchomi komendę określoną za pomocą instrukcji DO, do której RMDIR /S /Qpozycji odwołuje się zmienna %%a.

Powodem, dla którego to nie działa, jest zwykłe DIRprzesyłanie danych wyjściowych, RMDIRponieważ wysyłasz cały wynik (wiele wierszy) jednocześnie jako pojedynczy parametr do RMDIR. Do FORprzerwy dowodzenia dół tego wyjścia, iteracje przez każdego elementu, a następnie wysyła je do RMDIRjednego po drugim.

Gafel
źródło