SKY-OUTPUT

メーカー子会社勤務のSEがガジェットレビューや仕事で学んだこと、ライフスタイルについて書くブログ。システム開発関係の記事では丁寧に解説していきます。最近はバッチばかり作ってる。

指定した日付を持つファイルを削除するバッチ

概要

今回は ファイル名に8日前の日付を持つログファイルを削除するバッチ を作成しました。 doshbatch(Windowsコマンド)では日付の計算をゴリ押さないとできないため、powershellのコマンドを呼び出し対象日付を取得しました。

ソースコード

※削除対象のログファイルは、 log_yyyyMMdd.log とする。

@echo off
setlocal
rem 初版

rem 削除対象日付を取得
FOR /F "usebackq" %%a IN (`powershell [DateTime]::Today.AddDays"("-8")".ToString"("'yyyyMMdd'")"`) DO SET targetday=%%a
rem echo %targetday%
rem 削除対象ファイル名を設定
set targetFile=log_%targetday%.log
rem echo %targetFile%
rem 削除対象のファイルのフルパスを設定
set targetFilePath=C:\work\%targetFile%
rem echo %targetFilePath%
rem ファイルを削除する
del %targetFilePath%

exit

学べたこと

powershellでの実行結果を格納するには癖があること。 こんな書き方だとコマンドそのものが変数に格納されてしまう。

※この書き方はダメです

SET targetday=powershell [DateTime]::Today.AddDays"("-8")".ToString"("'yyyyMMdd'")

なので、下記書き方をする。

FOR /F "usebackq" %%a IN (`powershell [DateTime]::Today.AddDays"("-8")".ToString"("'yyyyMMdd'")"`) DO SET targetday=%%a

変更履歴

  • 20190908:初版