1. ホーム
  2. batch-file

[解決済み] バッチファイルを使用して、特定のタイプ(拡張子)のファイルをディレクトリの下に再帰的にすべて削除します。

2022-12-25 04:20:58

質問

dir1 と dir2 にあるすべての .jpg と .txt ファイル(例)を削除する必要があります。

私が試したのは

@echo off
FOR %%p IN (C:\testFolder D:\testFolder) DO FOR %%t IN (*.jpg *.txt) DO del /s %%p\%%t

あるディレクトリではうまくいき、他のディレクトリではうまくいきませんでした。

たとえば、これは何もしませんでした。

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

2番目のスニペットで何が足りなかったのでしょうか?なぜうまくいかなかったのでしょうか?

どのように解決するのですか?

ワイルドカードを使用するには del コマンドと /S で再帰的に実行します。

del /S *.jpg

追記

@BmyGuest は、なぜダウンボートされた回答 ( del /s c:\*.blaawbg ) が私の回答と異なる理由を尋ねました。

がありますね。 巨大な を実行するのと del /S *.jpgdel /S C:\*.jpg . 最初のコマンドは実行されます を現在の位置から を実行するのに対し、2つ目のコマンドは をドライブ全体 .

を削除するシナリオでは jpg ファイルを削除するシナリオでは、一部のアプリケーションが動作しなくなり、家族の写真をすべて失うことになるかもしれません。これはまったく迷惑な話ですが、コンピューターはまだ実行可能です。

しかし、何らかのプロジェクトで作業しているときに、すべての dll にあるすべてのファイルを削除したい場合 myProject\dll にあるファイルを削除し、以下のバッチファイルを実行します。

@echo off

REM This short script will only remove dlls from my project... or will it?

cd \myProject\dll
del /S /Q C:\*.dll

そして、最終的にすべての dll ファイルを削除してしまいます。 C:\ ドライブを形成します。すべてのアプリケーションは動作を停止し、コンピューターは使い物にならなくなり、次の再起動時に 4 次元へテレポートされ、そこで永遠に身動きが取れなくなります。

ここでの教訓は、このようなコマンドをドライブのルートで直接実行しないことです (または、次のような危険な場所でも実行できます)。 %windir% のような危険な場所) で実行しないことです。常に可能な限りローカルで実行することです。

補遺2

ワイルドカード方式は、8.3 形式と "long name" 形式のすべてのファイル名と一致させようとします。たとえば *.dllproject.dll project.dllold というように、意外と知られていないことがあります。参照 に関するこの回答は、SU をご覧ください。