web-dev-qa-db-ja.com

ファイルのリストをWindowsのRMDIRにパイプすることは可能ですか?

特定の式に一致するすべてのディレクトリを削除するWindowsコマンドプロンプトのバッチファイルを作成しています。

私は最初にDIRを使用して、式に一致するディレクトリのプレーンリストを返します。次のように、出力の各行をRMDIRコマンドにパイプします。

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

ただし、上記のコマンドは機能していないようです。なぜこれがうまくいかないのか完全には理解しておらず、説明を提供してくれる人に感謝します。

9
user78755

バッチファイルでは、次のものを使用できます。

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

これは、FORコマンドを使用して、指定されたコマンド(この場合はdir *.delete /A:D /B /S)の出力をループし、返されたアイテムごとに、DOステートメントRMDIR /S /Qで指定されたコマンドを実行します。アイテムが参照されます。変数%%aによって。

DIR出力をRMDIRに単純にパイプするだけでは機能しない理由は、出力全体(複数行)を単一のパラメーターとしてRMDIRに一度に送信するためです。 FORコマンドは、この出力を分解し、各項目を反復処理してから、それを1つずつRMDIRに送信します。

5
Gaff