フォルダ階層下、指定ファイル種の一括削除

 やあ子供たち、今日はWindowsコマンドプロンプト画面における、ちょっぴり怖くて便利な削除オプション、del /s の紹介だよ。不要なファイル種を一気に削除してフォルダの整理や、ディスクの容量回復に使えるよ。
 言わずと知れた del コマンドは特定のファイルだけ一気に削除してくれるのだけど、/s というミラクルなオプションをつけると、なんと指定フォルダの中のみでなく、その下にある全フォルダ階層の深みの底までくまなく見に行って削除を実行してくれるよ。

del /s /q *.txt *.bmp *.jpg

 でも気を付けてくれ。
del コマンドは、一度実行したら、unixでのファイル削除よろしく、ごみ箱に行ったりなどはせず、本当にもとに戻せない状態になってしまうのだ。(/s を使った場合ももちろんそうだ。)そんな怖いコマンドをいちいちコマンドラインからタイプするわけにはいかない。例えばタイプミスしてピリオドをカンマに打ち間違えただけで、*だけ生き残って全ファイルを削除する命令を出したことになってしまう(以下ソース内コメント参照)、そんな過ちを犯す可能性は最小限におさえたいというか、完全になくしておきたい。

 なので俺たちは、間違いをなくすために、そして汎用性を確保するためにも、バッチファイルにこれを注意深く書いたものを一度だけ作成し、これを使いたいときはこのバッチファイルにターゲットのフォルダをドラッグ&ドロップするだけな感じにしてしまおう。
 以下は、指定フォルダ下にある、.bmp という拡張子のファイルを一気に削除したい場合のスクリプトの記述例だ。

@echo off
rem
rem 本バッチファイルにドラッグ&ドロップしたフォルダ下にある、
rem 以下、*.拡張子で指定される、ファイルを全て削除します。
rem ごみ箱フォルダには移動されることはなく、
rem 一度実行するともとには戻せないので注意して下さい。
rem 
rem **(注意!以下、ピリオドをカンマに打ち間違えると、ただの*が認識され、
rem ** 指定フォルダ下全てのファイルが消えることになるので注意!)
rem 
rem
pushd %1
del /s /q *.bmp
popd
pause

 といった内容のテキストファイルを用意して、del-sq-bmp.bat というファイル名でもつけて保存しよう。あとはターゲットとなる任意のフォルダを本バッチファイル上にドラッグ&ドロップするだけだ。


以下、左図のようなフォルダ階層の中の全ての .bmp ファイルを削除した結果が右図。(図の作成には、前回記事で紹介した、treeコマンド活用バッチを利用。)

 以下はおじさんがよく使っているVisualStudio10の作業副産物自動生成ファイルを一気に削除するためのスクリプトだ。これもそのまま使えるのでここに載せておくとしよう。

@echo off
rem
rem 本バッチファイルにドラッグ&ドロップしたフォルダ下にある、
rem 以下、*.拡張子で指定される、ファイルを全て削除します。
rem ごみ箱フォルダには移動されることはなく、
rem 一度実行するともとには戻せないので注意して下さい。
rem 
rem **(注意!以下、ピリオドをカンマに打ち間違えると、ただの*が認識され、
rem ** 指定フォルダ下全てのファイルが消えることになるので注意!)
rem 
rem
pushd %1
del /s /q *.exe *.dll *.lib *.pdb *.suo *.sdf *.obj *.log *.tlog *.ilk *.ipch *.idb *.lastbuildstate *.manifest *.pch *.bi *.cache *.metagen
popd
pause

そしてこれをvcproj_cleaner.bat というファイル名でもつけて保管しておけばいいよね。とにかく、取り消しの効かない削除コマンドなので各自の責任で使用してくれよな。頼んだぞ。
チャオ!