• ベストアンサー

日付でファイルを削除するbatファイルの作り方

こんにちは。 batファイルを作成した事がなくて、作り方がわからない ので、質問させて頂きます。 例えば、D:\testと言うディレクトリに毎日、あるログファイルが 作成されてどんどん増えていくとします。 それでは、困るので、1ヶ月(30日)、もしくは1週間(7日)以上 経っているファイルは、削除したいのです。 1ヶ月、1週間のどちらでもいいですので、どなたか作り方を教えてください。 OSは、Windows系で、タスクにて毎日1回起動させようと考えています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • route156
  • ベストアンサー率85% (93/109)
回答No.3

 バッチファイルでは無理のようでしたので JScript で書いてみました。このスクリプトファイルと同じフォルダにある 7 日以上経過した拡張子 log のファイルを削除します。必要でしたら、経過日数や削除するファイルの拡張子は適当に書き換えてください。  また、タスクとして登録する際は wscript x:\xxx\dellog.js のように wscript の引数にスクリプトファイル名をフルパスで指定してください。  一応動作確認はしましたが、なにしろファイルを削除する訳ですから十分ご注意を。ログファイルが収められたフォルダを丸ごとコピーして、事前にそちらで動作テストすることをおすすめします。 //--- dellog.js --- fso = new ActiveXObject("Scripting.FileSystemObject"); curdir = fso.GetParentFolderName(WScript.ScriptFullName); folder = fso.GetFolder(curdir); files = new Enumerator(folder.files); curdate = Date.parse(new Date()) / 86400000; // 86400000ms = 1000ms * 60s * 60m * 24h = 1day for (; ! files.atEnd(); files.moveNext()) { filedate = Date.parse(files.item().DateLastModified) / 86400000; if (((curdate - filedate) >= 7) && (fso.GetExtensionName(files.item()) == "log")) fso.DeleteFile(files.item()); } //--- end ---  Windows 98 をお使いのようですから WindowsScript (wscript.exe, jscript.dll) はインストールされているはずですが、もし無ければこちらでどうぞ。JScript や VBScript のリファレンスも手に入ります。 http://www.microsoft.com/japan/developer/scripting/ 以上、ご参考まで。

その他の回答 (2)

  • arika
  • ベストアンサー率9% (18/186)
回答No.2

LOGのファイル名に、日付に関するデータがあれば、 バッチでなくて、コマンドラインで DEL FILE08*.LOG ってな感じはだめですか? (08が8月をあらわす)

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.1

バッチファイルでは無理があります。 例えばUNIXであれば ls -1t ログファイル* | awk '(NR>7){print "rm "$0}' | sh とすれば過去8個以降のファイル消すことになりますがAwkみたいな機能があるツールはOSの初期状態では存在しません。 ベクターなどからAWK等ダウンロードすれば可能ですが... ls -1t ログファイル* はDOSでは dir /b /o:-d ログファイル* で代用がききます。 AWKソフトが手に入れれたとしてバッチファイルは dir /b /o:-d ログファイル* | awk '(NR>7){print "rm "$0}' > del.bat del.bat の2行かな 注意:ログファイル* は ログファイル名を区別できるようなパターンマッチングを記述すること。 *とは任意の文字列 ?とは任意の1文字 例では先頭文字列が「ログファイル」で始まるファイル 嫌ならVBScriptで対応できるはずです。

mkim
質問者

お礼

ご回答ありがとうございます。 バッチファイルでは、無理でしたか^^;; DOSのコマンドには、Awkのように絞り込むのが、無いのですかね^^; ちょっと、残念です。 色々と、ご丁寧に教えて頂き感謝しています。 AWKソフト、VBScriptの方を検討してみます。 ありがとうございました。

関連するQ&A