こんにちは!ファイルが溜まってくるとストレスまで溜まっちゃうtknriaです!
膨大な実験データとかパッと整理がつかないと大変ですし、仕事の効率も落ちちゃいますよね!
なので、そういったゴミ箱に溜まったファイルなどを、定期的に自動的に削除したいというタスクがあります。
今の職場では、スキャナのスキャン結果をサーバー上の決まったフォルダに格納しています。
しかし、その容量が小さいということで、タイムスタンプが3日以上前のファイルは削除していく作業を、毎日したいという要望がありました。
OUTLOOK内の「削除済みボックス」を空にしたいということであればVBAで実装しますが、今回は共有フォルダ上の話ということもあってbatファイルを作成しました。
一括削除するbatファイルを作成しよう!
Windowsに標準で入っているメモ帳を立ち上げて、下記コードをコピペしてください。
pushd \\(サーバー名)\(フォルダ名)
forfiles /P %cd% /M *.pdf /D -3 /C "cmd /c if @isdir==FALSE del @file"
popd
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ユーザーにはありがたいですね。