• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:30日前を残して過去の日付フォルダを削除したい)

30日前を残して過去の日付フォルダを削除したい

このQ&Aのポイント
  • Windows7を使用しています。毎日複数作成される日時名(YYYYMMDDHHMMSS)のフォルダを1カ月分残して削除したいと思っています。日時名フォルダはC直下のbatchと言うフォルダ内に保存されていきますが、それ以外のフォルダやtxtファイルなどが混在します。
  • 下記の構文で記述したバッチを動かしたところ、全てのフォルダに対してrdが走ってしまうのですが、どのようにしたら求めた30日前の日付より前のもののみに対してフォルダの削除を行う事ができるのでしょうか?
  • echo WScript.Echo DateAdd("d",-30,NOW()) > tmp2.vbs for /f "tokens=1-6 delims=/-: " %%D in ('cscript //nologo tmp2.vbs') do set AND=%%D%%E%%F%%G%%H%%I del tmp2.vbs for /d %%J in (??????????????) do if "%%J" LSS %AND% rd /s "%%J"

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

for /d %%J in (??????????????) do if "%%J" LSS %AND% rd /s "%%J" で、if で比較するときに片方を " " で囲んでいるからです。 201210040000 は 20120904000000 より大きいけど、"201210040000" は 20120904000000 より小さい。 なぜならば、それぞれの先頭の文字 " (引用符) の文字コードは 2 の文字コードより小さいから。 for /d %%J in (??????????????) do if "%%J" LSS "%AND%" rd /s "%%J" で、OKです。

applebee83
質問者

お礼

notnotさん、有難うございます。 ""で出来ました!! %AND%を囲うところには気がつきませんでした。 本当に有難うございました!

その他の回答 (1)

  • maesen
  • ベストアンサー率81% (646/790)
回答No.1

書かれているバッチについては申し訳ありませんが検証していません。 別の角度からの提案です。 Windows 7ということですので forfiles コマンドが標準で使用出来ると思います。 やりたいことは1行で出来るのではないかと思います。 http://www.atmarkit.co.jp/fwin2k/win2ktips/1137forfiles/forfiles.html >それ以外のフォルダやtxtファイルなどが混在します。 この辺がちょっと面倒な部分だと思いますが、 /mオプションや @isdirの判定などで対応出来そうに思います。

applebee83
質問者

お礼

maesenさん、有難うございます。 forfilesコマンドは知らなかったので、今後の参考のため勉強したいと思います。

関連するQ&A