
同じディレクトリの複数のサブディレクトリを削除したいのですが、ディレクトリ名の最初の 3 文字が「tmp」です。これは機能しません:
C:\Documents and Settings\rajesh\Local Settings\Temp> rmdir tmp*
答え1
このrmdir
コマンドはワイルドカードを受け入れません。同じ目的を達成するために、小さなループを使用できます。これにより、指定されたパターンに一致するファイル/フォルダーごとに 1 回ずつ、コマンドが複数回for
実行されます。rmdir
for /D %f in (tmp*) do rmdir "%f"
- フォルダーが空ではなく、フォルダーを再帰的に処理したい場合は、
/S
末尾に追加する必要があることに注意してください。 - 確認チェックを抑止したい場合は、
/Q
これも追加してください。 - 各行のコマンドを印刷しないようにするには、
@
コマンドの前に を追加します。 - %f を引用符で囲むと、スペースを含むフォルダーを削除できます。
たとえば、これらすべてのオプションを使用すると、次のようになります。
for /D %f in (tmp*) do @rmdir "%f" /Q /S
完全な使用方法を確認するには、 と入力してくださいrmdir /?
。
答え2
安全で一般的な方法は、削除したいディレクトリのファイルを作成することです。dir /ad > blah
次に、ファイルに必要なものが含まれていることを確認し、ファイルのすべての行をエコーするコマンドを作成します。 for /f %a in (blah) do @echo %a
次に、必要なコマンドに合わせて修正します。たとえば、この行は、ファイルの各行の先頭またはfor /f %a in (blah) do @echo rmdir %a
末尾に rmdir を配置します。すでに存在する rmdir %a に /q /s を追加します。つまり、@echo rmdir %a /q /s を使用します。実行するコマンドが適切になったら、エコー部分を削除します。for /f %a in (blah) do @rmdir %a /q /s
別の方法としては、削除するサブディレクトリをリストするファイルを作成するという開始方法を使用する方法もあります。したがって、ファイルの各行を修正して、そのサブディレクトリを削除するコマンドを読み取ることができます。次に、ファイルに対して sed を使用して、サブディレクトリ x を rmdir x /q /s に置き換えます。
したがって、blah というファイルがある場合、 sed "s/.*/rmdir \0 \/q\/s/" blah >f
type f
各サブディレクトリを削除するためのすべてのコマンドが含まれていることを確認します。問題がなければ、実行して、f を f.bat に名前変更して実行できます。