2013/10/10

【Windows】複数の不要なファイルを定期的に一括削除したい



こんにちは!ファイルが溜まってくるとストレスまで溜まっちゃうtknriaです!


膨大な実験データとかパッと整理がつかないと大変ですし、仕事の効率も落ちちゃいますよね!

なので、そういったゴミ箱に溜まったファイルなどを、定期的に自動的に削除したいというタスクがあります。


今の職場では、スキャナのスキャン結果をサーバー上の決まったフォルダに格納しています。

しかし、その容量が小さいということで、タイムスタンプが3日以上前のファイルは削除していく作業を、毎日したいという要望がありました。


OUTLOOK内の「削除済みボックス」を空にしたいということであればVBAで実装しますが、今回は共有フォルダ上の話ということもあってbatファイルを作成しました。



一括削除するbatファイルを作成しよう!


Windowsに標準で入っているメモ帳を立ち上げて、下記コードをコピペしてください。


pushd \\(サーバー名)\(フォルダ名)
forfiles /P %cd% /M *.pdf /D -3 /C "cmd /c if @isdir==FALSE del @file"
popd



この3行で終わり。

これをメモ帳にコピペし、「削除.bat」という名前で保存します。(ファイル名は何でも良い)


このファイルをダブルクリックしてやることで、処理が行われます。



億劫な解説!


とは言ったものの、ぶっちゃけ、僕も他のサイトさんを参考にして試行錯誤して作ったんで、解説できるほどわかっていません。


・pushd、popd

\\(  )\(  ) のようなサーバー上のパスのことをUNCパスといいますが、いきなりカレントディレクトリをここに指定してもエラーが発生します。一度、ネットワークドライブに割り当てることで指定が可能になります。

pushdだと、このネットワークドライブの割り当てを自動的に行ってくれるため、手間がかかりません。

さらに、終了時にpopdコマンドを入力することで、割り当てを解除してくれます。


・forfiles

forfilesは、
 /P :指定したディレクトリ内のファイルを処理していきます。
 /M :拡張子等を指定することで、マスクすることもできます。
 /D :今回の「/D -3」によって、「本日から3日以上前のファイル」を対象にしています。
 /C :「if @isdir==FALSE」でファイルかフォルダかを判別し、ファイルであれば「del」削除するという処理を行う、という指示です。

詳しくはコマンドプロンプトで、「forfiles /?」と入力して、使い方を参照してください。



億劫なあとがき


batファイルは特に開発環境が必要ないので、Windowsユーザーにはありがたいですね。