OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.121246
  • 閲覧数7943
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 72% (161/221)

こんにちは。
batファイルを作成した事がなくて、作り方がわからない
ので、質問させて頂きます。

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

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

  • 回答No.3
レベル10

ベストアンサー率 85% (93/109)

 バッチファイルでは無理のようでしたので 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/

以上、ご参考まで。
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 45% (207/457)

バッチファイルでは無理があります。 例えばUNIXであれば ls -1t ログファイル* | awk '(NR>7){print "rm "$0}' | sh とすれば過去8個以降のファイル消すことになりますがAwkみたいな機能があるツールはOSの初期状態では存在しません。 ベクターなどからAWK等ダウンロードすれば可能ですが... ls - ...続きを読む
バッチファイルでは無理があります。
例えば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

お礼率 72% (161/221)

ご回答ありがとうございます。

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


  • 回答No.2
レベル10

ベストアンサー率 9% (18/186)

LOGのファイル名に、日付に関するデータがあれば、 バッチでなくて、コマンドラインで DEL FILE08*.LOG ってな感じはだめですか? (08が8月をあらわす)
LOGのファイル名に、日付に関するデータがあれば、
バッチでなくて、コマンドラインで
DEL FILE08*.LOG
ってな感じはだめですか?
(08が8月をあらわす)
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
あなたが体験したトラブルや解決方法を共有しませんか?
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ