- ベストアンサー
複数階層にまたがる別名称フォルダ削除のコマンド
- Windows7を使用しています。現在作成中のバッチで、複数の階層にまたがる複数のフォルダを1年分残して削除する方法がわかりません。
- フォルダ階層は、ビルA、ビルB、ビルCの3つのフォルダがあり、それぞれのフォルダ内には複数の階層と日付フォルダがあります。
- 削除したいのは、最下位の日付フォルダ内のフォルダです。日付フォルダは名称が異なる複数のディレクトリに別れているため、コマンドの記述方法がわかりません。
- みんなの回答 (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 サンプルは実際に実行していないので若干の記述ミスはあるかもです。 もっとスマートな方法があるかもです。
お礼
有難うございます! やり方が違っていたのか、setlocalの方は上手くいかなかったのですが、上のfor文で試したところ上手くいきました! 可能であれば少し解説していただけると有難いのですが…。 まだまだビギナーでfor文も勉強しているところです。 宜しくお願いします。