• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数階層にまたがる別名称フォルダ削除のコマンド)

複数階層にまたがる別名称フォルダ削除のコマンド

このQ&Aのポイント
  • Windows7を使用しています。現在作成中のバッチで、複数の階層にまたがる複数のフォルダを1年分残して削除する方法がわかりません。
  • フォルダ階層は、ビルA、ビルB、ビルCの3つのフォルダがあり、それぞれのフォルダ内には複数の階層と日付フォルダがあります。
  • 削除したいのは、最下位の日付フォルダ内のフォルダです。日付フォルダは名称が異なる複数のディレクトリに別れているため、コマンドの記述方法がわかりません。

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

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

他にいい方法があるかもしれませんが参考までに。 >フォルダが名称が異なる複数のディレクトリに別れているため()にどう記述すればよいか困っています。 >for /d %%Q in (    ) do if "%%Q" LSS "%ALOG%" rd /s %%Q この1行では厳しいように思います。 ALOGの内容は想像ですがYYYYMMDDHHMMSS形式の文字列だと想像しますので、 if "%%Q" LSS "%ALOG%"の判定が成立するためには、カレントフォルダでfor文を実行しないと %%QがYYYYMMDDHHMMSSになりません。 (パス名が付いてしまう) 例にあるように階層が決まっているのならばこんな感じfor文をネストすればでいけそうに思います。 cd C:\新規フォルダ\アーカイブ for /d %%a in (*) do ( cd %%a for /d %%b in (*) do ( cd %%b for /d %%Q in (*) do ( if "%%Q" LSS "%ALOG%" rd /s %%Q ) cd .. ) cd .. ) 階層が不定だとちょっと難しいですね。 階層が不定で最下位がYYYYMMDDHHMMSSという判定ならば、こんな方法もあるかと思いますが、パス名の後ろから14文字を比較するだけなので判定ミスが出る場合があるかもしれません。 setlocal enabledelayedexpansion for /r C:\新規フォルダ\アーカイブ /d %%Q in (*) do ( set DELDATE=%%Q if !DELDATE:~-14! LSS "%ALOG%" rd /s %%Q ) endlocal サンプルは実際に実行していないので若干の記述ミスはあるかもです。 もっとスマートな方法があるかもです。

applebee83
質問者

お礼

有難うございます! やり方が違っていたのか、setlocalの方は上手くいかなかったのですが、上のfor文で試したところ上手くいきました! 可能であれば少し解説していただけると有難いのですが…。 まだまだビギナーでfor文も勉強しているところです。 宜しくお願いします。

関連するQ&A