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


40

D:ドライブにいくつかのフォルダーがあるとしましょう:

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

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

rmdir D:\A* /s /q

しかし、エラーが表示されます:(

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

このdelコマンドはで機能し*ますが、フォルダーも削除する必要があります。コマンド
を介してそれを達成する方法はありrmdirますか?


2
WindowsまたはDOSコマンドシェルの開発では、統一性と常識が決して役に立たなかった。悲しい部分は、これらのシェルが開発されたときに、インテリジェントデザインに光を当てるモデルシステムがあったことです。もちろん、シェルは、このゴミを一緒に平手打ちした恐ろしいから存在しない思考プロセスの一例にすぎません-私は本当に私が思うことを伝えたいと思います、ハハ。
リックオシェイ

回答:


33
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*あなたはそれがしたい場合。


そのままで、パス/フォルダー名にスペース文字が含まれている場合、コマンドは中断します。
および31415 14

1
A *に「IF NOT EXIST goto EFO」を追加できますか?
セルダー14

3
パスcontainesスペース文字であれば、この作品のための:/ F "delims =" %I IN( 'DIR / A:D / S / A B *')RD / S / Q "I%"を行う
ルイスCantero - MSFT

5
バッチファイル内からこれを実行する場合、コマンドが次のようになるように2つのパーセント記号を使用する必要があることを追加したいと思いますfor /f %%i in ('dir /a:d /s /b A*') do rd /s /q %%i
Fred Clausen

フラグ 'w / sub'を2回使用する必要はありません:)
lunicon

25

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

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.

参考文献


A *に「IF NOT EXIST goto EFO」を追加できますか?
セルダー14

たとえば、Aの文字で始まるフォルダーがないとします。したがって、コマンドはB *に移動する必要があります。説明できるかどうかわからない:(
serdar

1
私から+1。反対票がわかりません。シンプルなコマンドFOR /DFOR /D /Rコマンドで複数のパターンを実行できますが。単に使用しますin( "A*" "B*" "C?D" )
dbenham 14年

1
実際には/R、マスクに一致するサブフォルダーは、親ではないサブフォルダーにある可能性があるため、このオプションは必要です。
dbenham

5
警告:.batファイルでこのソリューションを使用する場合は、%Gの代わりに%% Gを使用する必要があります。こちらを
-ValarDohaeris

18

誰もまだforfilesについてOPに言っていないのですか?!

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

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

2
これは素晴らしい答えです。受け入れられるべきです。
eacousineau

1
非常に優れたソリューションであり、十分に説明されています。
アンドレアス

便利な答え:Dが、IMO for /dのようにand31415の答えは、よりクリーンで効率的でもあります。
Superole

12

adn31415の答えは正しいですが、これをバッチまたはcmdスクリプトに入れると壊れます。私はこれがあなたがそれをどのように使用するかを理解するまで、何時間も頭を打ちました。

DOSコマンドウィンドウで:

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

Batchまたはcmdスクリプトで:

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

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


3
バッチスクリプトの時間を節約できました!
トゥアン

問題ありません:)だから、答えは自明ではなく、もっと多くの人がそれに出くわすと思っていたので、答えを投稿しました。
サムB

削除されないように除外を追加できますか?
セルダー

( "\\%PC%\ D $ \ A *。*")の/ d %% aの/ P PC = ENTER IPまたはホスト名の設定rd / s / q "%% a"このスクリプトは正しく機能しますか?
セルダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.