特定の文字列を含むファイルをまとめて削除/移動するバッチファイル(コマンドプロンプト)
どうも。dettです。
Windows10で作業をしている際、特定の文字列を含むファイルをまとめて削除する必要がありました。
ただ、ファイル自体が数千存在し、とても手作業では対応できない量です。
そこで、特定の文字列を含むファイルをまとめて削除/移動するバッチファイルを作成しました。
特定の文字列はリストでも指定できるので、我ながら便利なものを作ったと自画自賛です。
用意するもの1 削除対象ファイル名(に含まれる文字列)が記載されたテキストファイル
前提条件
例えば、日付がファイル名に含まれており、特定の日付(例えば土日)のファイルを削除したい場合。
対象ファイル名を以下とします。
消すファイル 20170729.txt、20170730.txt、20170805.txt、20170806.txt・・・
消さないファイル 20170731.txt、20170801.txt、20170802txt・・・
削除対象ファイル名(に含まれる文字列)が記載されたテキストファイルの中身
Excel等を駆使して、どうにかがんばって土日の日付を記載したファイルを作る。
ファイル名:list.txt
ファイルの中身:
20170729
20170730
20170805
20170806
・・・
フォルダにあるファイル名一覧を出力するならコマンドプロンプトの「dir」コマンドも便利です。
用意するもの2 バッチファイルを用意する
以下の内容をテキストファイルに記載。
保存。拡張子を「.txt」⇒「.bat」に変更。
@echo offset /p TARGET_LIST="削除対象ファイルが記載されたテキストファイル名を入力してください >"
echo %TARGET_LIST% を対象に作業実施します。pause
pushd %0\..for /F %%i in ( %TARGET_LIST% ) do del "%%i"
echo これでおわり
pause
pushd %0\..exit
これで用意するものは終わりです。
バッチファイルの使い方
①バッチファイルを実行(ダブルクリック)
②コマンドプロンプトに「削除対象ファイルが記載されたテキストファイル名を入力してください >」と表示されるので、「用意するもの①」で作成したテキストファイル名を入力。(バッチファイルと同じフォルダに入れておいてください)
③処理が実行、全部終わるとコマンドプロンプトに「これでおわり」が表示。
④何かキーを押すと終了
解説&改変の仕方
ファイル名の指定が面倒
ファイル名の指定が面倒な場合は、以下の行を削除。
set /p TARGET_LIST="削除対象ファイルが記載されたテキストファイル名を入力してください >"
echo %TARGET_LIST% を対象に作業実施します。
for文を以下に変更
for /F %%i in ( "list.txt" ) do del "%%i"
そもそも対象の文字列が1つしかなくてリストを作りたくない場合
del *"削除対象文字列"*
をコマンドプロンプトで入力。
削除じゃなくて、移動したい場合
for文を以下に変更
for /F %%i in ( "list.txt" ) do move "%%i" "移動対象フォルダ"
コピーしたいときはmoveをcopyに変更。
こんな感じです。