私は、ネストされたファイル構造から31日以上経過したすべてのファイルを削除するスクリプトを用意しています。バッチファイルを使用してサブフォルダ内の空のフォルダをすべて削除しますか?
ある時点では、空のフォルダが残りますが、削除する方法を探しています。理想的には、31日より新しいフォルダを保持してください。 rd FolderName
は、空でない場合はフォルダを削除しないので、これを使用してフォルダを削除できます。問題は、これを行うと、空のフォルダはすべて削除されず、ツリー内で最も深いフォルダだけが削除されるということです。ファイルが私に与えられたためにリストを逆にすることができれば、それはうまくいくでしょう。それが不可能なら別の方法がありますか?
NB:rd/sはネストされたフォルダを削除するだけでなく、そのファイルも削除します。私は空でない場合、フォルダを削除したくありません。ここで
は私のスクリプトです:
@echo off
cd /d "C:\MyPath"
:: remove files that are older than 31 days (retention period)
forfiles /s /d -31 /c "cmd /c if @isdir==FALSE del @relpath")
:: attempt to remove folders (will fail if the folder is not empty.)
forfiles /s /d -31 /c "cmd /c if @isdir==TRUE rd @relpath"
上記のスクリプトだけ最も深いフォルダを削除します。 forfilesを8回連続して実行できると思うが、それは重大なリソースの無駄だ。
'SORT'は'/r'オプションを持っています... – Magoo
@Magoo興味深い。今私はスクリプトでそのようにする方法を見つけなければなりません。 forfiles | sort/rは動作しますが、どのようにコマンドを実行すればいいですか?あなたが答えを持っているなら、私に答えを書いてください。私は喜んであなたに投票と賞を授与します。 :) echo %% a'は、ディレクトリ内の基本的なディレクトリリストを生成します: – LPChip
'for/f" delims = "%dir/s/b/ad" C:\ mypath "^ | sort/r 'ディレクトリのサブディレクトリが表示され、そのディレクトリ名がそのリストの*サブディレクトリの*後に*表示されるように、逆順に並べ替えます。 – Magoo