web-dev-qa-db-ja.com

rmdirまたはrdコマンドでワイルドカードを使用する

D:ドライブにフォルダがあるとしましょう。

D:\Air
D:\Abonden
D:\All
D:\Whatever

"A"で始まるすべてのフォルダ(すべてのサブフォルダとファイルを含む)を削除します。私はこのコマンドを試してみました:

rmdir D:\A* /s /q

私は、エラーが出ます。

ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。

delコマンドは*と連携しますが、フォルダも削除する必要があります。
rmdirコマンドでそれを達成する方法はありますか?

33
serdar
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

これを使ってテストしてみましょう:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

これにより、実行するコマンドがコマンドプロンプトにパイプアウトされ、何が起こっているのかを確認できます。

「C:\ temp\jjj\aaa」などのサブフォルダも検索され、aaaフォルダが削除されることに注意してください。最上位のフォルダ "C:\ temp\aaa"だけを見たい場合は、コマンドから"/s"を削除します。

その鍵は、検索文字列に入れるA *です。必要に応じて、これはaaa*aaa*および*aaa*などのワイルドカードを受け入れます。

31
Fazer87

ワイルドカードを使用してフォルダを削除する

rmdir/rdコマンドだけでは、 ワイルドカード文字 (つまり、*および?)はサポートされません。この制限をforループでラップすることでこの制限を回避できます。

使用例

for /d %G in ("X:\A*") do rd /s /q "%~G"

ファイルやフォルダーを削除するときは、最初にrdコマンドをechoに置き換えることをお勧めします。このようにして、実際に削除してはいけないものはすべて確実に削除できます。

複数のパターン

異なるパターンに一致する複数のフォルダを削除するためには、構文はそれほど変わりません。 @ dbenhamが正しく指摘しているように、1行のコマンドで十分です。別のパスを指定することもできます。

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

ボーナス - フォルダの存在確認

特定のフォルダが存在するかどうかを確認したい場合は、次のコマンドを使用できます。

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

参考文献

19
and31415

OPにforfilesについてまだ誰も話していませんか。

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/Pはパス名 - 検索を開始する場所
/Mは検索マスクです。Aで始まるファイルを検索する
/Cは実行するコマンドです。
/Sは再帰的なサブフォルダーです(opは要求しなかったので、ここには含めませんでした)。
17
JJS

adn31415の答えは正しいですが、これをバッチまたはcmdスクリプトに入れると失敗します。私はこれがあなたがそれを使用する方法であることを理解するまで私は何時間も頭をぶつけた。

DOSコマンドウィンドウの場合:

for /d %G in ("X:\A*") do rd /s /q "%~G"

バッチまたはcmdスクリプトの場合:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

それを「.bat」または「.cmd」ファイルに入れたい場合は、「%」文字を2倍にする必要があります。

9
Sam B