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

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

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

Windows7を使用しています。 現在作成中のバッチで、下記の階層内にある複数のフォルダを1年分残して削除しようとしています。 最下位のフォルダ名称はYYYYMMDDHHMMSSの日付フォルダになっており、その日付フォルダにはtxtファイルが格納されていますが、日付フォルダごと削除したいと思っています。 C>  新規フォルダ>     アーカイブ>         ビルA>            1階>YYYYMMDDHHMMSS               YYYYMMDDHHMMSS                ・・・            2階>YYYYMMDDHHMMSS                ・・・         ビルB>            地下1階>YYYYMMDDHHMMSS                   YYYYMMDDHHMMSS                   ・・・         ビルC>             1階>YYYYMMDDHHMMSS                YYYYMMDDHHMMSS                YYYYMMDDHHMMSS                ・・・             2階>YYYYMMDDHHMMSS                ・・・             3階>YYYYMMDDHHMMSS                ・・・ コマンドは下記で削除しようと思っていますが、YYYYMMDDHHMMSSフォルダが名称が異なる複数のディレクトリに別れているため()にどう記述すればよいか困っています。 for /d %%Q in (    ) do if "%%Q" LSS "%ALOG%" rd /s %%Q 分かる方がいらっしゃれば教えていただけますでしょうか。 宜しくお願いします。

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

  • ベストアンサー
  • 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

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

    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"

  • 【VBS】古い日付のフォルダを削除したい

    あるフォルダ(C:\test\)内のフォルダ名が日付形式(YYYYMMDD)のものの中で、 一番新しい日付のフォルダを残し、古い日付のフォルダを削除したいです。 日付が新しいか古いかは、フォルダ名で判断。作成日時で判断するのではない。 C:\test\フォルダには、日付形式(YYYYMMDD)のフォルダとそれ以外の名称のフォルダ、ファイルが含まれます。 例ですが、C:\test\フォルダに以下のフォルダ・ファイルがあるとして、 C:\test\AbcD1\ C:\test\20130601\ C:\test\20130611\ C:\test\Aiueo2\ C:\test\aa2.log C:\test\20130602\ C:\test\20130605\ C:\test\20130614\ C:\test\Zxy2\ C:\test\aaa.txt 削除するのは、 C:\test\20130601\ C:\test\20130611\ C:\test\20130602\ C:\test\20130605\ です。 以下のフォルダについては、フォルダ名が日付形式(YYYYMMDD)ではないので、 削除しません。 C:\test\AbcD1\ C:\test\Aiueo2\ C:\test\Zxy2\ 以下のフォルダについては、フォルダ名の日付が最新のため、 削除しません。 C:\test\20130614\ ファイルについては、削除しません。 C:\test\aa2.log C:\test\aaa.txt フォルダの一覧を取得するvbsは作成できました。 ですのであとは、 1.日付形式のフォルダを取得 2.最新の日付形式のフォルダ名を取得する 3.最新以外の日付フォルダを削除する 部分ができれば、できそうです。 サンプルソースや参考サイトを教えてください。

  • 【Ant】指定した複数のフォルダを一括で削除するには

    いつもお世話になります。 Antで指定した複数のフォルダを一括で削除するということを実現したいのですが、例えば、下記のフォルダ構成があったとします。 C:  \parent   \a   \b   \c   \d   ・・・ (Cドライブ直下のparentフォルダ配下に、複数のフォルダがあります。) この状態で、parentフォルダ直下のa、b、cの3つのフォルダのみをフォルダ毎削除したいのです。 それぞれのフォルダに対してdeleteタスクを記述する方法もありますが、もっと簡潔に記述することは可能でしょうか。 (例えばfilesetやdirsetなどを用いるなどして) 使用しているAntのバージョンは1.8.0です。 宜しくお願いします。

    • ベストアンサー
    • Java
  • バッチコマンドでファイル名の一部を参照して削除

    Windows7を使用しています。 バッチコマンドで、C:\新規フォルダ\LOGに作成された“LOG_YYYYMMDD”と言うテキストファイルを30日前を残して全て削除したいと思っています。 その他ファイルやフォルダが混在する可能性があるので”LOG_”がついたフォルダを対象として削除したいのですが、どのようにすれば良いでしょうか? パターンを考えてみましたが、どちらも足りない部分があるようで上手くいきません。 (1)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do if "%%D" LSS "%ANS%" del /s /q %%D  ※(1)のifの"%%D"のままではダメなのは分かるのですが、どのようにしたら良いのか困っています。 (2)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do (   set DELDATE=%%D   if "%DELDATE%" LSS "%ANS%" del /s DELDATE   ) 簡単な解説もいただけると助かります。 宜しくお願いします。

  • フォルダーが削除出来ません。

    以前に教えて!No.688812 [ http://oshiete1.goo.ne.jp/kotaeru.php3?q=688812 ]でファイルの削除は教わり出来たのですが、今度はフォルダーが削除出来ません。 何方かご伝授お願い致します。 c:\のフォルダにアクセスも削除も出来ません。 最初のフォルダc:\新しいフォルダは開いて、次の階層のフォルダc:\新しいフォルダ\○○○とc:\新しいフォルダ\△△△にアクセスすると、"アクセスできません。アクセス拒否されました。"と警告されます。

  • コマンドプロンプトでの削除

    D:\aaaaa このフォルダ内に複数のフォルダとファイルがあります。 aaaaaフォルダは残して、中のフォルダとファイルを全て削除したいです。 del /f/s/q D:\aaaaa\* だとファイルしか削除されません。 rd /s/q D:\aaaaa\ だとaaaaaフォルダごと削除されてしまいます。 aaaaaフォルダ内のフォルダは決まったフォルダではなく実行ごとに名前の違うフォルダがあります。 名前を指定してのフォルダ削除ではなく、aaaaa内の全てのフォルダとファイルを 削除するにはどうしたら良いでしょうか?

  • バッチファイルでフォルダ削除

    初心者の為バッチファイルの御教授お願いします。 下記のようなフォルダがあります。 0001_2015_11_25 0002_2015_11_25 0001_2015_10_10 0002_2015_10_10 みていただくと分かると思いますが日付を含んだフォルダ名となっております。 このフォルダ名から日付を取得し、指定した日数より古い日付を持ったフォルダを削除したいと思っています。 例えば日数を30とすると下記フォルダのみが残るようにしたいと思っています。 0001_2015_11_25 0002_2015_11_25

  • vistaで、フォルダ削除できないとき

    vista-sp2です。 explorerを常用しているのですが、フォルダの名前を変えたり、移動や削除が出来ない場合、当該フォルダにあるファイル全てを削除もしくは移動すると当該フォルダを移動したり削除したりすることができる場合がよくあります。 これって、どういう現象なのでしょうか。 勿論、そのようなことをしなくても、ファイルが入ったままフォルダごと削除・移動できるケースもあります。 当該フォルダが、Cドライブの「ユーザーフォルダ」より下位にあるかどうかで差が出たりもするのでしょうか?

  • フォルダの削除ができません

    こんにちは XPで複数ユーザーアカウントを登録していましたが、その内の1アカウントをコントロールパネルから削除(中のデータも一緒に削除)しました。その後、ローカル(Cドライブ)に残っている削除済みの該当アカウントのフォルダを削除しようとしましたが、その中のサブフォルダが1つだけどうしても削除できません。原因は削除前に該当ユーザーアカウントでログイン中、このフォルダ(複数ファイル存在)の共有をプライベートで設定してあったため、アクセスが拒否されてしまうようです。 どうしたら削除できるんでしょう?どなたかお助け下さい。

  • OutlookExpressでメールをフォルダ別にバックアップしたい。

    OutlookExpress内のメールを  ・上位フォルダ「X」の中に下位フォルダ「A」「B」「C」「D」  ・上位フォルダ「Y」の中に下位フォルダ「E」「F」「G」、  ・上位フォルダ「Z」の中に下位フォルダ「H」「I」「J」 のように(手作業で)フォルダに分けて保存しています。 メールが溜まってきたので、念のためバックアップを取ってから整理(消去)しようと考えています。 ここで「X」~「Z」を全部一気にDVDにバックアップ出来ればいいのですが、 DVDは読取りのみで書込みが出来ないので、複数のCD-Rに分けて保存せざるを得ない状況です。 このため"フォルダ「X」とその下位フォルダ全部"と言う形でCD-Rにバックアップしたいのですが 現在のメール保存先には上位フォルダも下位フォルダも同じ所に「*.dbx」という名称で入っています。 ということは、  ・CD1枚目:「X.dbx」「A.dbx」「B.dbx」「C.dbx」「D.dbx」  ・CD2枚目:「Y.dbx」「E.dbx」「F.dbx」「G.dbx」  ・CD3枚目:「Z.dbx」「H.dbx」「I.dbx」「J.dbx」 のように、保存したいものを一つ一つ拾うしかないのでしょうか。 実際には、下位フォルダの中に更にフォルダがあるのでフォルダの数も多く、 しかもフォルダ名前の付け方がバラバラでソートによる抽出も難しいのので、 一つ一つ拾うのが非常に面倒なのですが、何か簡単な方法はないでしょうか?

専門家に質問してみよう