treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

定期的にフォルダ内を削除する掃除バッチ

ファイルサーバ管理の一つに、「不要データは残さない」というセオリーがあります。
この不要データを残さないためには、ある一定の期間(時間)を定め自動的にデータを削除する、という方法が有効です。
本日は実際にフォルダ内の自動削除を実行する方法をご報告します。
※自動削除ですので、ご利用の際には十分注意して入念なテストをお願いします。当方ではデータ削除に対する一切の責任を負いかねます。

ファイルサーバの共有フォルダには
「自動削除ルールを決めておき毎週削除(掃除)する共有場所」が存在します。
「一時的な領域として公開するフォルダ。」かもしくは「月次/年次で強制的にアーカイブ化するために、ファイルサーバからデータを移動する」という管理ルールを定めた共有フォルダは自動的な削除が必要となります。
バックアップ取得後削除、というのもよくある自動削除です。

こじんまりとした仕組みで自動削除に使うのは
・タスクスケジューラ
・バッチファイル
の2点を使います。

ただしタスクスケジューラはバックアップソフトによっては「プリコマンド/ポストコマンド」(もしくはプリ/ポストコマンドと表記)が使えるので、バッチファイルを
 バックアップの事前に実行したいバッチファイル=プリコマンド
 バックアップ完了後に実行したいバッチファイル=ポストコマンド
という具合にセットします。
以前の「小規模な共有フォルダのバックアップなら安価に用意しましょう。 - treedown’s Report」でご紹介した基本的なバックアップで使用するソフトウェアBunBackupではこのプリ/ポストコマンドはありませんので、本記事のようにタスクスケジューラで実行することになります。

今回は一番単純かつ分かりやすい、「時間で決め打ちして実行」をタスクスケジューラにスケジュール設定して実行させます。

実際に使うバッチファイルです。
今回は共有フォルダ「\\FILSVR\Delivery」フォルダ(ローカルではD:\Delivery)の内容を消去するという例でバッチファイルをご紹介です。
----------------------------------------------
サーバ内で実行する場合のバッチ
----------------------------------------------
echo @off
cd D:\Delivery
del /q *.*
rmdir /s /q *
----------------------------------------------
別PCから実行する場合のバッチ
----------------------------------------------
echo @off
pushd \\FILSVR\Delivery
del /q *.*
for /D %%f in ( * ) do rmdir /s /q "%%f"
popd
----------------------------------------------

バッチファイル自体は非常にシンプルです。
処理の概要を記載しておきます。
----------------------------------------------
解説
----------------------------------------------
コンソール出力をしないようにecho offしています。
cdやpushdコマンドで処理のカレントパスをUNCに指定しています。
delコマンドでカレントディレクトリ内のファイルを確認ナシですべて削除を実行
rmdirコマンドですべてのフォルダを削除します。
※forループ:カレントディレクトリ内のフォルダを抽出し変数%%fに代入、rmdirコマンドの確認なしで削除、カレントディレクトリ中のフォルダがすべてなくなるまで削除を繰り返す。
popdコマンドでpushdで移動した一時的なカレントディレクトリから抜ける(戻る)
----------------------------------------------

これをタスクスケジューラします。

まずバックアップタスクに要している時間を調べておくことが必要です。
バックアップタスクが完了する予定時刻から余裕を持って1時間から2時間程度後の時間、かつ業務開始前の時間でタスクを実行します。

タスクの自動実行のためタスクスケジューラを開きます。

「コントロールパネル」⇒「管理ツール」⇒「タスクスケジューラ」と選択します。

タスクは新規作成となりますが、最終的に以下の点が抑えられていればバッチファイルの自動実行ができます。
(※わけあって見せられない部分がありますのでご了承ください。)

  1. タスク(バッチファイル)の実行権限

    f:id:treedown:20150918095832p:plain
    タスクの実行に使うユーザアカウントを「実行コンピュータ上でバッチファイルが起動できる権限」かつ、「共有フォルダのデータを削除する権限」を有しているユーザであることを確認しておきます。

    ローカルAdministratorsグループで共有フォルダにアクセスして手動でファイル/フォルダ削除ができればOKです。
  2. 実行時間を指定(トリガタブから詳細の編集した画面)

    f:id:treedown:20150918100044p:plain
    この画面では「毎週月曜日のAM2:00にタスク実行する」という時間設定になっています。このAM2:00の時間を都合のよい時間に変えます。

    もし画面下部「詳細設定」内の「有効」チェックボックスが抜けている場合、タスクは実行されないのであわせて確認しておきます。
  3. 実行するバッチファイルを指定(操作タブ)
    f:id:treedown:20150918100257p:plain
    操作タブ画面で実行するバッチファイルを指定します。
    操作:「プログラムの開始」となっており詳細に作成した削除バッチファイルが指定されていれば、スケジュールした時間に削除バッチファイルが実行されます。

ここまでの仕掛けで作成した掃除(データ削除)バッチファイルが指定の時刻に起動するようになります。

今回は掃除バッチファイルでしたが、コマンドの実行を羅列したバッチファイルを今回と同様にタスクスケジューラで設定すると、コマンドでできることはすべて自動実行することができます。

もし何か自動実行で操作を自動化したい需要があれば、タスクスケジューラを使ってみるのはいかがでしょうか?