for /f を応用させた お掃除バッチ | ある意味メモ帳がわり

ある意味メモ帳がわり

ブログの説明を入力します。

for /f を利用して
更新日時が昨日までのtxtファイルを削除する「お掃除バッチ」


トークンの切り出しを行う関係上、空白の存在するファイル名には未対応

for のオプション /f は in で指定する文字列に

" " で指定するトークンを切り出し、変数に格納し、doに処理させる。


ココらへんの書き方はjava とかcとかのforループとは全く異なるので注意が必要


-----------------------------


@echo off


rem 環境変数の遅延展開
setlocal enabledelayedexpansion


rem 作業フォルダを移動
c:
cd c:\temp


rem date /t コマンドの第一トークンを取得
for /f "tokens=1" %%a in ('date /t') do set HONJITSU=%%a


rem dirコマンド(タイムフィールド:最終更新日)にて該当するファイルを抽出する。
rem 4行分はスキップし、第一トークンから第四トークンまでを 変数b(c,d,e)に順次格納する
rem 区切り文字はdelimsで指定する(ここでは空白文字)


for /f "skip=4 tokens=1-4 delims= " %%b in ('dir /tw "???????????.txt"') do (

rem dir コマンドの結果、はリストに"個のファイル"が出るまで
if "%%c"=="個のファイル" goto END

rem 更新日を取得
set KOUSHINBI=%%b

rem 取得した本日の日付と該当するファイルの更新日が異なれば...削除しなはれ
if not "!HONJITSU!"=="!KOUSHINBI!" (
@echo %%e:::::deleting
del /Q %%e
) else (
@echo %%e::::notDelete
)
)

endlocal
:END
pause


-----------------------------

ちなみに先月までのものを・・・・としたければ日付の判定部で

"!HONJITSU:~0,-3!"=="!KOUSHINBI:~0,-3!"

のようにすればよい