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ć.

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.