- 締切済み
一定期間ごとにフォルダを自動削除したい。
○概要 バックアップソフトで特定フォルダを、毎時00:00に別ドライブにバックアップを取っておりますが、この時に自動生成されるバックアップフォルダ(フォルダとファイルが自動生成されます)を一定期間経過後自動削除したいのですが、ぴったり目的に合うフリーウェアが見つかりません。 ○要望 デスクトップPCのMyDocumentフォルダを、外付けHD購入して増設し、付属ソフトでバックアップを取っております。 バックアップソフトは付属のものなので、簡易機能であり 営業日単位でバックアップジョブを登録してます。 ジョブ(1):月曜日のバックアップ(火曜日の00:00にMydocumentを自動バックアップ) ジョブ(2):火曜日のバックアップ(水曜日の00:00にMydocumentを自動バックアップ) ジョブ(3):水曜日のバックアップ(木曜日の00:00にMydocumentを自動バックアップ) ジョブ(4):木曜日のバックアップ(金曜日の00:00にMydocumentを自動バックアップ) ジョブ(5):金曜日のバックアップ(土曜日の00:00にMydocumentを自動バックアップ) バックアップ先は増設した外付けHD(Eドライブ)配下の曜日フォルダです。 E:\Backup\Monday\ E:\Backup\Tuesday\ E:\Backup\Wednesday\ E:\Backup\Thrusday\ E:\Backup\Friday\ 各ジョブに対応したフォルダ名はシステムで一意に決められ変更はできません。 また、ジョブごとに1フォルダずつできるのもバックアップソフトの仕様です。 各ジョブに対応した曜日ごとのフォルダ配下に、00:00にMydoumentを自動バックアップすると 乱数フォルダ名のフォルダが自動生成され、その中にバックアップソフト独自の1かたまりになったファイルが1つと設定ファイルが1つできます。 この、各ジョブに対応した曜日フォルダ配下に自動生成されるバックアップフォルダを一定期間ごとに自動削除したいというのが要望です。 期間は1ヶ月(20営業日)で削除したいので、1ヶ月たったフォルダを自動削除でも E:\Backupフォルダを監視し、フォルダ数が20個以上いったら、古いものから自動削除という設定でも 各曜日フォルダ配下のフォルダが4個以上いったら古いものから自動削除でも構いません。 まずフォルダの自動削除ソフトウェアが数が少なく、ファイル対応のものばかりです。 あっても、監視フォルダ数が少なかったり、孫フォルダ非対応のものしか見つかりません。 よい方法があったらお教え願います。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- k1013m61
- ベストアンサー率12% (2/16)
私はあまり知らないのですがそれはパソコンの問題とは感じません セキュリティ-の問題です 今のパソコンでは難しいと感じます なぜあなたがしないのでしょうか? ひとり秘書を雇えば解決します
- iriyak
- ベストアンサー率48% (40/82)
> 確かにyyyymmddhhmmss のように見えますよね。 はい。こちらはまだ(あてにしてよい)仕様かどうかは分かりませんから、孫フォルダの最終更新日付を比較の対象にして、削除するためのバッチプログラムを自動作成する Windows Script Host (VBScript, JScript) のプログラム例をご紹介します。 ■listup.wsf <package> <job> <script language='VBScript'> Function MonthsAgo(n) MonthsAgo = FormatDateTime(DateAdd("m", - n, Now)) End Function Function DaysAgo(n) DaysAgo = FormatDateTime(DateAdd("d", - n, Now)) End Function Function HoursAgo(n) HoursAgo = FormatDateTime(DateAdd("h", - n, Now)) End Function </script> <script language='JavaScript'> Enumerator.prototype.asArray = function () { var anArray = []; for (; !this.atEnd(); this.moveNext()) anArray.push(this.item()); return anArray; } Array.prototype.do_ = function (operation) { for (var i = 0; i < this.length; i++) operation(this[i]); } Array.prototype.select_ = function (discriminator) { var anArray = []; this.do_(function (each) { if (discriminator(each)) anArray.push(each) }); return anArray; } function listup_files(filepath, discriminator) { discriminator = discriminator || function (each) { return true } var FileSystemObject = new ActiveXObject('Scripting.FileSystemObject'); var rootFolder = FileSystemObject.getFolder(filepath); var subFolders = new Enumerator(rootFolder.subFolders).asArray(); subFolders.do_(function (subFolder) { WScript.echo('REM ' + subFolder); var subsubFolders = new Enumerator(subFolder.subFolders).asArray(); subsubFolders.select_(discriminator).do_(function (subsubFolder) { WScript.echo('RMDIR /Q /S ' + subsubFolder); }); WScript.echo(''); }); WScript.echo('PAUSE'); } </script> <script language='JavaScript'> var targetpath = 'E:\\EasySaverBackup'; // ★1 var discriminator1 = function (folder) { return folder.DateLastModified < new Date(MonthsAgo(1)) } var discriminator2 = function (folder) { return folder.DateLastModified < new Date(DaysAgo(1)) } var discriminator3 = function (folder) { return folder.DateLastModified < new Date(HoursAgo(1)) } listup_files(targetpath, discriminator1); // ★2 </script> </job> </package> ■listup.wsf の編集 ★1: 親、子、孫フォルダの親フォルダを指定します ★2: discriminator1, 2, 3 は、実行する時刻から、それぞれ 1か月前、1日前、1時間前の孫フォルダを抽出するよう指示するためのプログラムで、listup_files() の第二引数に与えてやります。 ■実行方法 (3)は画面に出力し、(4)は rmdir.bat バッチファイルに出力をリダイレクトします。(5)で実際に削除を指示します。 (1) listup.wsf を E:\ に格納します (2) コマンドプロンプトを開き CD E:\ に移動します (3) cscript.exe //nologo listup.wsf (4) cscript.exe //nologo listup.wsf > rmdir.bat (5) rmdir.bat ■(3)の実行例 ・削除対象がない場合 E:\>type rmdir.bat REM E:\EasySaverBackup\2007071210480309193a97 RMDIR /Q /S E:\EasySaverBackup\2007071210480309193a97\20080422000540 RMDIR /Q /S E:\EasySaverBackup\2007071210480309193a97\20080429000748 RMDIR /Q /S E:\EasySaverBackup\2007071210480309193a97\20080506110544 RMDIR /Q /S E:\EasySaverBackup\2007071210480309193a97\20080513000344 REM E:\EasySaverBackup\20070712105211091d0173 RMDIR /Q /S E:\EasySaverBackup\20070712105211091d0173\20080416000319 RMDIR /Q /S E:\EasySaverBackup\20070712105211091d0173\20080423000228 RMDIR /Q /S E:\EasySaverBackup\20070712105211091d0173\20080430000800 RMDIR /Q /S E:\EasySaverBackup\20070712105211091d0173\20080507085010 REM E:\EasySaverBackup\20070712105354091e963c RMDIR /Q /S E:\EasySaverBackup\20070712105354091e963c\20080417001456 RMDIR /Q /S E:\EasySaverBackup\20070712105354091e963c\20080424000837 RMDIR /Q /S E:\EasySaverBackup\20070712105354091e963c\20080501002234 RMDIR /Q /S E:\EasySaverBackup\20070712105354091e963c\20080508000339 REM E:\EasySaverBackup\20070712105419091ef4f6 RMDIR /Q /S E:\EasySaverBackup\20070712105419091ef4f6\20080418000230 RMDIR /Q /S E:\EasySaverBackup\20070712105419091ef4f6\20080425000132 RMDIR /Q /S E:\EasySaverBackup\20070712105419091ef4f6\20080502000801 RMDIR /Q /S E:\EasySaverBackup\20070712105419091ef4f6\20080509000226 REM E:\EasySaverBackup\20070712105457091f8c83 RMDIR /Q /S E:\EasySaverBackup\20070712105457091f8c83\20080419000341 RMDIR /Q /S E:\EasySaverBackup\20070712105457091f8c83\20080426000234 RMDIR /Q /S E:\EasySaverBackup\20070712105457091f8c83\20080506111003 RMDIR /Q /S E:\EasySaverBackup\20070712105457091f8c83\20080510000353 PAUSE E:\> ・削除対象がある場合 E:\>type rmdir.bat REM E:\EasySaverBackup\2007071210480309193a97 REM E:\EasySaverBackup\20070712105211091d0173 REM E:\EasySaverBackup\20070712105354091e963c REM E:\EasySaverBackup\20070712105419091ef4f6 REM E:\EasySaverBackup\20070712105457091f8c83 PAUSE E:\> ■さらなる改善ポイント ・バッチプログラムの実行も指示する ・タスクとして登録して定期的に実行を指示する ・★2 で指示する discriminator をチューニングする ・その他のプログラミング言語の移植にトライする
- iriyak
- ベストアンサー率48% (40/82)
こんにちは。 出来あいのソフトウェアをお探しのようですが、そういう削除を行うプログラムを自作することは選択肢に入れてもよいのでしょうか。 孫フォルダの名前にバックアップを着手した時刻らしきものが記録されているように見えます。そこに注目するとプログラム可能では?? と回答者は感じました。
一定期間ごとに指定したフォルダの中身だけを自動削除
補足
具体的にディレクトリのツリー表示を載せるとこんな感じです。 f: ├─ EasySaverBackup <Folder> ├─ 2007071210480309193a97 <Folder> │ ├─ 20080422000540 <Folder> │ ├─ 20080429000748 <Folder> │ ├─ 20080506110544 <Folder> │ └─ 20080513000344 <Folder> ├─ 20070712105211091d0173 <Folder> │ ├─ 20080416000319 <Folder> │ ├─ 20080423000228 <Folder> │ ├─ 20080430000800 <Folder> │ └─ 20080507085010 <Folder> ├─ 20070712105354091e963c <Folder> │ ├─ 20080417001456 <Folder> │ ├─ 20080424000837 <Folder> │ ├─ 20080501002234 <Folder> │ └─ 20080508000339 <Folder> ├─ 20070712105419091ef4f6 <Folder> │ ├─ 20080418000230 <Folder> │ ├─ 20080425000132 <Folder> │ ├─ 20080502000801 <Folder> │ └─ 20080509000226 <Folder> └─ 20070712105457091f8c83 <Folder> ├─ 20080419000341 <Folder> ├─ 20080426000234 <Folder> ├─ 20080506111003 <Folder> └─ 20080510000353 <Folder> EasySaverBackup配下に出来ている5つのフォルダがそれぞれ 月~金のジョブ用のフォルダです。 その配下に毎時00:00にバックアップフォルダと、その中にバックアップファイルが作成されるので、ディスク容量を圧迫しないように、1ヶ月前のフォルダを消していきたいのです。 1ヶ月前というのはおおよそなんで、本日5/13であれば、4/13までのフォルダを消していく具合です。 今は手動でやっています。 ちなみに一つのジョブフォルダ配下のバックアップフォルダの中には以下のようなファイルが生成されます。 └─ 20080510000353 <Folder> ├─ 00000001.bkd.....2097109KB.....2008/05/10 0:10:12 ├─ 00000002.bkd.....2097113KB.....2008/05/10 0:12:20 ├─ 00000003.bkd.....2097102KB.....2008/05/10 0:14:58 ├─ 00000004.bkd.....2097108KB.....2008/05/10 0:18:44 ├─ 00000005.bkd.....1520101KB.....2008/05/10 0:20:46 ├─ database.edb.....8680KB.....2008/05/10 0:20:48 └─ database.txt........1KB.....2008/05/10 0:20:46
タスクスケジューラというのは知っていますか? タスクスケジューラを使えば可能です。
- foitec
- ベストアンサー率43% (1080/2457)
>乱数フォルダ名のフォルダが自動生成され 自動的に消去するユーティリティがあったとして、バックアップソフトウエアが生成した乱数に基づくフォルダ名は判別できるでしょうか? ワイルドカードなどの条件を指定すれば可能かもしれません。 とこおで、OSのNTバックアップを利用(ボリュームシャドーコピーが利用される)で スケジュール管理し週単位で「月・火・水・木・金)を指定し 上書き指定すれば常に最新のものだけがバックアップされます。 つまり同じ曜日の古いバックアップは上書きにより消されます。 欠点 ボリュームシャドーコピーを利用するので元のボリュームが壊れると復元できない。
お礼
>自動的に消去するユーティリティがあったとして、バックアップソフトウエアが生成した乱数に基づくフォルダ名は判別できるでしょうか? この質問を上げる前まで検討していたソフトがあります。 http://www.vector.co.jp/soft/win95/util/se220077.html これだと、指定フォルダ内に指定したフォルダ数以上のフォルダができると、古いものから削除できます。 今回の場合、孫フォルダまで監視する必要がある・もしくは、5フォルダを監視する必要があるので、検討から外れましたが。。 >ボリュームシャドーコピー バックアップしてるPCはメインドライブをハードウェアRAIDをかけております。 ソフトウェアでかけてるバックアップは、オペレーションミスによる誤消去ファイルを復活させるため、1ヶ月前の分までバックアップを保存しておく事なので、確かに差分バックアップでも構わないのですが、バックアップ用に300GBの外付けHDを準備してあるので、フルバックアップを選択しました。
補足
>出来あいのソフトウェアをお探しのようですが、そういう削除を行うプログラムを自作することは選択肢に入れてもよいのでしょうか。 OKです。vbsかbatファイル程度であれば、着手は可能だと思います。 >孫フォルダの名前にバックアップを着手した時刻らしきものが記録されているように見えます。そこに注目するとプログラム可能では?? と回答者は感じました。 ヒントありがとうございます。 確かにyyyymmddhhmmss のように見えますよね。 ソフトの仕様にはそこまで触れられていなかったので こちらについては詳しく検証して調べていく必要がありそうです。