• ベストアンサー

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

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

  • mkim
  • お礼率72% (161/221)

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

  • ベストアンサー
  • 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

  • ファイルやディレクトリの削除コマンドについて

    ファイルやディレクトリの削除コマンドについて 現在、サーバ内のあるディレクトリ内に保存されているファイルやフォルダを 全て消去したいと思い、batファイルを作成してテストを行っているのですが、 うまくいきません。 ファイルの削除はうまくいきますが、空フォルダが残ってしまします。 batファイルの中身は以下の通りです。 del /s /q x:\test\abc\*.* rd /s /q x:\test\abc\* testやabcは実際のディレクトリ名では有りませんが、 やりたいことは、abcディレクトリ下のフォルダおよびファイルを 全て削除し、abcディレクトリは消さずに残すようなbatファイルが作りたいということです。 abcディレクトリの下には多くのファイルやディレクトリがあり、毎日違う名前のファイルや フォルダが作成されるのでそれを毎日まとめて消す方法をご教授願います。 よろしくお願いします。

  • 古いフォルダーを削除するbatファイル

    batファイルでディレクトリのバックアップを行いました。 このバックアップを行うときに古いディレクトリを 削除するbatファイルを考えているのですがうまくいきません。 どなたかお知恵をお貸しください。 下記のように名前が付けられたディレクトリがあります。 090601 090602 090603 090604 このディレクトリの日付が古いディレクトリを削除するようにしたい。 (上記の場合090601が該当) 変数にディレクトリの090601を入れられるようなbatを作ればいいのでしょうが。 それが浮かびません。 どのようにしたらよろしいでしょうか??

  • batファイルでの一括削除

    知り合いに送ったファイルに不要な物が幾つかあるのが分かりました 知り合いはパソコン操作がそこまで得意でないのでこちらで作成したbatファイルを送り一括削除したいと思います 知り合いに送った圧縮ファイルがどこで展開されたのか分からないのですが 相対パスは分かるのでbatファイルでは相対パスで削除する事は出来るでしょうか? 削除したいファイルは全て名前がsendfilesと言う名前のディレクトリに入っており ディレクトリの中には数字3文字で001から154までほぼ連番で並んだディレクトリがあります このうち037と142の2つをディレクトリと中のファイルごと削除したいです 相対パスでの削除について分かりやすく書かれているURL等を教えて下さい

  • ファイルを削除・新規作成するbatファイル

    batファイルの作り方について教えてください。 私はThunderbirdを利用しているのですが、毎日のようにInboxとJunkというファイルがメールを削除しても膨大に増えてしまうので、 毎日そのファイルを一度削除し、新規作成することを行っています。 この処理を自動化したいと考えています。 つまり (1)Thunderbirdのメール該当フォルダに移動 (2)InboxとJunkファイルを削除 (3)InboxとJunkフォルダを新規作成 (4)終了 という流れです。 batファイルの作り方はなんとなくわかるのですが 実際に作ったことがなくどのコマンドを使っていいのか よくわかりません。よかったら お知恵をお借りしたいと思います。 よろしくお願いします。

  • タスクスケジューラでbatファイルを動かしたい

    Windows10とWindows7を使っています Biosにタイマー機能がないノートPC(Windows7)を、遠隔PC(Windows10)からタスクスケジューラを使ってWakeOnLanで起動させることにより、タイマー起動のようなことをしようかと思い立ちました。 http://plaza.rakuten.co.jp/mscrtf/diary/201210120000/ こことほぼここと同じことを考え ・コマンドでMagicPacketを送れるソフト(MagicSend)を探しだし ・MagicSendと同一ディレクトリ内にWakeOnLanのbatファイルを作って配置し ・そのWakeOnLanのbatファイルをタスクスケジューラに登録 したところ、起動に失敗しました。 ・WakeOnLanのbatファイルを手動で動かすと起動する ・WakeOnLanのbatファイルにストップウォッチソフト起動コマンドを追加してみたところ、手動ではWakOnLanもストップウォッチも起動するが、タスクスケジューラでは起動しない ところから、タスクスケジューラがバッチファイルの実行に失敗しているのではないかと思います ここから先がわからなくなりました この場合、どこを疑うべきでしょうか? Windows10のタスクスケジューラはWindows7とは違う点があるとか、タスクスケジューラでbatファイルを動かす場合はbatファイル内に記述するコマンドのカレントディレクトリの位置に気をつけなくてはならない(絶対パスを指定すべし?)とか、その他ありますか?

  • batファイルについて

    C:\work\a\a.txt C:\work\a\b.txt C:\work\a\c.txt C:\work\b\a.txt C:\work\b\d.txt C:\work\c\a.txt C:\work\d\a.txt C:\work\d\e.txt C:\work\d\f.txt 上記のようなファイルがあったとき 各ディレクトリのa.txtだけを残したいのですが (他のファイルは全部削除) どのようなbatファイルを作成すればよろしいのでしょうか。 すみませんが方法がありましたら教えてください。

  • *.bat ファイルの作り方

    初歩的な質問ですが、よろしくお願いします。 例えば、EXCELを起動するときに、 スタート→すべてのプログラム→EXCEL とたどっています。 これを変更して、batファイルを作成して起動したいと思っています。 batファイルを作成して、以下のように編集しても起動しません。 C:\Program Files\Microsoft Office\Office10\EXCEL.EXE どのように書けば良いのか、分かる方よろしくお願いします。

  • MS-DOSでのファイル/フォルダ一括削除

    以下のようなフォルダ、ファイルがあるとし、LOGDIR下にある「200803」の文字列を 含まないファイル及びフォルダをDOSコマンド(Win2003)で削除(できれば一括で) する方法を模索しています。 Cドライブ   |   |   +LOGDIR      |      +---LOG20080228_084539    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080229_101553    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080301_132059    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080302_185945    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      |      |-----test20080229_085523.txt    <--- 削除対象ファイル      |      |-----test20080229_092310.txt    <--- 削除対象ファイル      |      |-----test20080301_153859.txt    <--- 削除対象ファイルでない      | 方法をご存知の方、いらっしゃいませんか?

  • batファイルで、call使っても戻ってこない

    こんにちは 教えてほしいことがあります。 batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、 以下のようにやってみたのですが、戻ってきている様子がありません。 どこが間違っているのか教えていただければと思います。 以下file-backup.bat echo 処理開始 >> %LOG% date /t >> %LOG% time /t >> %LOG% C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\********\file2" @echo off call "Z:\file-backup2.bat" echo 処理終了 >> %LOG% ←---これ以下がログファイルに表示されない time /t >> %LOG% echo. >> %LOG% ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。 環境はwinserver2008です。 ご教授お願いします。

  • batファイルの相対パス

    batファイルの相対パス あるバッチが相対パスであるファイルを参照しています このバッチファイルを直接起動すれば、正しく参照できますが、 別のディレクトリにいる別のバッチファイルからcallされた場合、 呼び出し先の相対パスではなく、 呼び出し元の相対パスになってしまいファイルを参照できません。 この問題をスマートに解決する方法はありませんか? 例のchild.batからはfile.txtを参照できますが、 parent_1.bat経由の場合、ファイルが見つかりませんとなります。 child.bat の中で、「cd c:\dir_a」を書いて基点を変更すればとりあえずは行けそうですが、可能な限り絶対パスのベタ書きは避けたいです。 宜しくお願いします。 【例】 c:\ | +-dir_a | | | +-child.bat | | | +-file.txt | +-dir_b | | | +-parent_1.bat | +-dir_c | +-parent_2.bat ===== file.txt ===== test-test-test ===== file.txt ===== ===== child.bat ===== type ./file.txt pause ===== child.bat ===== ===== parent_1.bat ===== call c:\dir_a\child.bat ===== parent_1.bat =====