none
ログファイル内の日付を判別し、一定の日付より古いログを削除する手順 RRS feed

  • 質問

  • https://answers.microsoft.com/ja-jp/windows/forum/windows_10-other_settings/%E3%83%AD%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4/55a737e8-0783-4a28-b2bd-9e4c7500883b?tm=1607497000515
    上記に投稿いたしましたが、モデレーターの方からこちらを案内して頂きました。
    改めて投稿させて頂きます。

    【質問事項】
    バッチファイルから以下のように日付・時間のついたログが書き出されます。
    ~~~~~~~~~~~~~~~~~~
    2020/12/07 15:52:51.18 
    結果は成功 

    2020/12/08 15:51:51.87 
    結果は成功 

    2020/12/09 15:52:51.18 
    結果は成功 
    ~~~~~~~~~~~~~~~~~~

    ログが増えすぎるのを防ぐために一定の日付より古い(例えば2日以前)ログを削除したいです。
    バッチファイルにどのようなコマンドを入れれば実現できるでしょうか?
    2020年12月10日 2:22

回答

  • 結果的に以下のような形にしました。

    for /f %%a in ('wmic os get LocalDateTime ^| findstr \.') DO set LDT=%%a
    SET logFile=C:\batch\Logs\%~n0-%LDT:~0,8%.log

    こちらを参考にしました。
    https://qiita.com/minorufujimoto/items/78f9da9fbff69d304cf4
    • 回答としてマーク kd0901 2020年12月11日 8:05
    2020年12月11日 8:04

すべての返信

  • cmdによるバッチなら、出力ファイル名に日付を含めてつけてしまえば、良いのではないか?

    「echo "%date% %Time% Errror" >>log.%date:~0,4%%date:~5,2%%date:~8,2%」とかやれば、2020/12/10分のログはlog.20201210に出力されるから、別途にファイル名でソートして新しいもの3つだけ残してファイル単位で削除すればいい。

    参考:Windowsのバッチファイル中で日付をファイル名に使用する (1/2):Tech TIPS - @IT (atmarkit.co.jp)

    一つのファイルのままで処理しようとすると、データの読み取って処理する必要があるので処理が複雑になります。

    アプリケーションによるバッチ処理で、ログファイルがアプリケーションによって開かれたままである場合には、ファイルの排他制御の関係で無理があります。


    2020年12月10日 2:53
  • なるほど、ありがとうございます。

    確かにファイルを分けた方がよさそうですね。

    forfilesコマンドで〇日前のファイルを削除という形にしようと思います。

    2020年12月10日 4:37
  • 結果的に以下のような形にしました。

    for /f %%a in ('wmic os get LocalDateTime ^| findstr \.') DO set LDT=%%a
    SET logFile=C:\batch\Logs\%~n0-%LDT:~0,8%.log

    こちらを参考にしました。
    https://qiita.com/minorufujimoto/items/78f9da9fbff69d304cf4
    • 回答としてマーク kd0901 2020年12月11日 8:05
    2020年12月11日 8:04