【bat】バッチファイルでファイル名に指定文字列を含まないファイルを削除する方法

【bat】バッチファイルでファイル名に指定文字列を含まないファイルを削除する完全ガイド|findstr・複数キーワード・拡張子フィルタ・再帰・ドライラン・実践パターンまで徹底解説 bat

バッチファイルを使用して、指定した文字列をファイル名に含まないファイルを削除する方法について詳しく解説します。特定のファイルを自動的に管理したいときに便利な手法です。この記事では、具体的なバッチファイルの作成手順とその実行方法をご紹介します。

スポンサーリンク

バッチファイルの作成

以下のコードをエディタにコピーして貼り付けます。

@echo off
setlocal

rem 指定する文字列
set "keyword=指定文字列"

rem 対象ディレクトリ
set "targetDir=対象ディレクトリのパス"

rem 対象ディレクトリに移動
pushd "%targetDir%"

rem 各ファイルを確認し、指定文字列を含まないファイルを削除
for %%F in (*) do (
    echo %%F | findstr /i "%keyword%" >nul
    if errorlevel 1 (
        echo Deleting %%F
        del "%%F"
    )
)

rem 元のディレクトリに戻る
popd

endlocal
  • 指定文字列 には、削除対象から除外する文字列を指定します。
  • 対象ディレクトリのパス には、対象となるディレクトリのパスを指定します。

delete_files.bat などの名前で保存します。

注意事項

削除の前にバックアップを取る
バッチファイルを実行すると、指定した文字列を含まないファイルが削除されます。削除されたファイルは元に戻せないため、実行前にファイルのバックアップを取ることを強くお勧めします。

確認用にファイルのリストを表示する
実行前に、削除されるファイルのリストを確認するために、スクリプト内の del “%%F” を echo %%F に変更して、削除されるファイルを確認することができます。

よくある質問(FAQ)

Q. FINDSTRで特定の文字を含まないファイルをリストアップするにはどうすればよいですか?
A. findstr /v "含みたくない文字" ファイルリスト.txt/vフラグは一致しない行を表示します。ファイル名のリストに対して適用する場合はdir /b | findstr /v "パターン"でマッチしないファイル名のみを取得します。これをFORループに渡してファイルを処理できます。
Q. 特定の文字列を含まないファイルを削除するワンライナーを教えてください。
A. for /f %%f in ('dir /b *.txt ^| findstr /v "keyword"') do del "%%f"でkeywordを含まない.txtファイルを削除できます。削除前にechoに置き換えて対象ファイルを確認してから実行することを強く推奨します。
Q. ファイル名ではなくファイルの中身で判定してファイルを削除するにはどうすればよいですか?
A. findstr /l /m "検索文字" *.txtでファイルの中身に検索文字を含むファイル名一覧を取得します。/v /mで含まないファイル名を取得できます。これをFORループで処理します。ただし大量ファイルの処理はPowerShellのSelect-Stringの方が高速で柔軟です。

まとめ

この記事では、バッチファイルを使って指定文字列を含まないファイルを効率的に削除する方法を紹介しました。この方法を活用することで、ディレクトリ内のファイル管理を自動化し、作業効率を向上させることができます。