一定時間経過したフォルダ内のファイルを順次削除する方法とBATファイルの最小化タスクスケジューラ登録法

2020年4月21日

こんにちわスピカです
ここんとこ忙しくて、というより年度またぎもあり子供の進学もありでちょっとへたり気味。
ゴールデンウィークでも行楽等どこもいくこともなく、市立の図書館通いです。

まあ愚痴を言ってもしかたないので、このあたり気分転換で、最近ちょっとしたテクニックといっても大したことないんですが、

DOSのBATファイルを最小化のままタスクスケジューラに登録することに成功したのでその備忘録も兼ねて書きたいと思います。

きっかけは、防犯カメラの保存映像の処理

完全な防犯カメラ装置は何十万円とするが、24時間365日撮影し記録する。そして一定期間過ぎたら自動で削除。

なんかこれってドライブレコーダの画像処理に似ていませんか。

これを安物カメラ、しいていえばUSBカメラに防犯用のフリーソフト、たとえば

LiveCapture3

とかで一定時間ごとにできたファイルを一定期間保存しておいて、その後削除する。

 

なぜそんなことが必要か

まずは、保存した映像データの不必要性があります。それは防犯が目的なため事件にならなかったらそのファイルは単なるゴミ。

ハードディスク上に単なるゴミが大量に増え続けることになります。ただそれがゴミであると認識されるまでに多少の時間を必要とします。

大概は事件性がないため2週間程度あとに消去するのが望ましい。

 

次に法的な問題、防犯の目的で保存しておいても肖像権などの問題もあるためなるべく早く消したい。いつまでもそういったファイルをPCに保存しておくのは望ましくない。

 

ということで、あるフォルダ内の一定期間を過ぎたファイルを定期的に削除する方法を、しかも自動で・・

 

まず第一に一定期間過ぎたファイルの削除BATファイルの作成

これは DOSの「forfiles」コマンドを使って実現可能です。

forfiles /p ○○○○○○ /D △△△ /c "cmd /c del /F /S /Q @file"

○○○○○○の部分にはフォルダ名を、たとえば「d:\削除したいよ」とか、すでにあるフォルダなら、エクスプローラのフォルダ表示欄で右クリック「アドレスをテキストとしてコピー」をクリック。

そして、テキストファイルで作成中のなかへ張り付けすればOK。

△△△のところは期間を入れる。たとえば-30なら30日前。って感じ

下記は私が作ったBATファイルです。

上記では 30日以前のファイルを検索して削除する例です

これを適当な名前のBATファイルで保存。

気をつけなくてはいけないのが、拡張子表示オプションにチェックをしていないと「適当な名前.BAT.txt」となりBATファイルにならないこと。

そのときは、エクスプローラのメニューから拡張子の表示オプションにチェックをいれてやろう。

そうすれば拡張子が見えるため間違いないでしょう。

 

削除用BATファイルを試しに実行してみる。

適当なフォルダに削除しても良いファイルを作って、タイムスタンプをある程度前に設定(このあたりの作り方は手動でもよいしvectorあたりからそれようのソフト(こんな感じのソフト)を探して利用してもOK、

タイムスタンプの変更はWindows標準ではたしか不可能なためタイムスタンプを変更できるユーティリテーなどを利用する。このあたりで探してみて

もし既に削除したいファイルがあるフォルダがあればそれを利用してもよいでしょう。ただ自分が思ったとおりの処理をするかどうか不明なためとりあえず前記の方法で試してみた方がよい。

 

思ったような処理が出来たら自動実行の設定

とりあえずここまで来たら70パーセントは終わった感じですね。あとはタスクスケジューラに登録して完成。

 

ところがBATファイルはそのままだとDOSウィンドウが開いてしまうため見た目良くない。

そのためDOS窓を最小化して起動する方法を模索。

Windows10ではショートカットファイルのタスクスケジューラへの登録はできない。

たしか私が昔Windows7でやったころはBATファイルのショートカットファイルを作成してプ

ロパティから「実行時の大きさ」を「最小化」に設定してやり

それをタスクスケジューラに登録することで可能だったがWindows10ではそのショートカットの登録ができないようである。

試しに、「.lnk」をファイル名のあとに追加しても出来なかった。

 

試行錯誤の末、たどり着いた結論

DOSのBATファイルだとウィンドウを表示しないように自動実行するのは今の環境ではどうやら不可能との結論となった。

 

で別の方法を模索

それはWindows Script Host 、これはWindowsに標準で付いているスクリプト言語でテキストエディタで作成することが可能。

そのうえ、DOSのBATコマンドでは出来ない複雑な命令も実行できる。

今回のような比較的単純な作業ではそれほど難しくなく作れる

そんなこんなで作ったのが下記

Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run "○○○○○○.bat" , 7, true

1行目と2行目はおまじないみたいなもの、3行目が実質的な命令。

「○○○○○○.bat」はフルパスで指定してやるのがポイント。

またファイル名の次の7が最小化で実行のオプション

番号の指定はこちらで詳しく書かれていますが

0  ウィンドウを非表示にし、別のウィンドウをアクティブにします。
1  ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、元のサイズと位置に戻ります。アプリケーションでウィンドウを最初に表示するときには、このフラグを指定してください。
2  ウィンドウをアクティブにし、最小化ウィンドウとして表示します。
3  ウィンドウをアクティブにし、最大化ウィンドウとして表示します。
4  ウィンドウを最新のサイズと位置で表示します。アクティブなウィンドウは切り替わりません。
5  ウィンドウをアクティブにし、現在のサイズと位置で表示します。
6  指定したウィンドウを最小化し、Z オーダー上で次に上位となるウィンドウをアクティブにします。
7  ウィンドウを最小化ウィンドウとして表示します。アクティブなウィンドウは切り替わりません。
8  ウィンドウを現在の状態で表示します。アクティブなウィンドウは切り替わりません。
9  ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、元のサイズと位置に戻ります。アプリケーションで最小化ウィンドウを復元するときには、このフラグを指定してください。
10  アプリケーションを起動したプログラムの状態に基づいて、表示状態を設定します。

 

出来たWindows Script ファイルをタスクスケジューラに登録

あとはスタートメニューのなかのWindows管理ツールからタスクスケジューラを呼び出し新規にタスクを作成すればOK

 

この方法ならショートカットファイルではなく、VBSファイルなため登録ができる。

しかも最小化で、・・

 

登録したら試してみよう。

私はログオンして1分後に起動できるよう設定をしてある。起動してみるとタスクバーにDOSのアイコンが表示される。

ウィンドウは表示されない。こうなれば成功。

 

総 評

今回は防犯カメラのデータのその後の処理としての手法を記したが、これは他にも色々と応用が利く方法です。

ただ上記のコマンドはこのままだとゴミ箱に入らないまま完全に削除されてしまうため復元が大変。

削除したてならファイル復活ツールなどで可能でしょうが時間がかかり、完全に復元もできるかどうか・・

そのため必ずテストしてから実践してくださいね。上記手法でHDD内のデータが消えても責任は負えませんので、自己責任でお願いします。

 

専門知識不要!クラウド型レンタルサーバー「Zenlogicホスティング Powered by AWS」