2017-09-04 16 views
0

私は、ネストされたファイル構造から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回連続して実行できると思うが、それは重大なリソースの無駄だ。

+0

'SORT'は'/r'オプションを持っています... – Magoo

+0

@Magoo興味深い。今私はスクリプトでそのようにする方法を見つけなければなりません。 forfiles | sort/rは動作しますが、どのようにコマンドを実行すればいいですか?あなたが答えを持っているなら、私に答えを書いてください。私は喜んであなたに投票と賞を授与します。 :) echo %% a'は、ディレクトリ内の基本的なディレクトリリストを生成します: – LPChip

+0

'for/f" delims = "%dir/s/b/ad" C:\ mypath "^ | sort/r 'ディレクトリのサブディレクトリが表示され、そのディレクトリ名がそのリストの*サブディレクトリの*後に*表示されるように、逆順に並べ替えます。 – Magoo

答えて

0

@Magooの助けを借りて、私はsort/rを使ってリストを逆転させることができたと指摘したが、私は解決策に到達することができた。次のように

使用されるコードは次のとおりです。なしコンテンツディレクトリを除去した後のために

@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.) 
for /f %%i IN ('forfiles /s /d -31 /c "cmd /c if @isdir==TRUE echo @relpath" ^|sort /r') DO rd %%i 
+0

あなたの答えはあなた自身の質問基準を満たしておらず、ディレクトリは過去30日間に修正されておらず、内容のないディレクトリだけを削除します。過去30日間に変更されていないすべてのファイルを削除して、コンテンツを持たないすべてのディレクトリを削除したかったのです。 – Compo

+0

@ comppo私の答えに追加された行は、私のスクリプトの最後の行です。私は答えのスクリプトのテキストをコピーすることができますが、それは過度のように見えました。しかし、あなたが幸せになれば、スクリプトを編集して追加します。 – LPChip

1

、すでに@Magooによって暗示として、より良いと、あなた自身の答えよりもはるかに高速になります:

FOR /F "DELIMS=|" %%A IN ('DIR/B/S/AD-S-L^|SORT/R') DO RD "%%A" 2>NUL 
+0

なぜそれが速いのか説明できますか?また、空でも31日より古いフォルダは除外されません。 – LPChip

+0

私の質問に気づいたのは、できるだけ31日以内に空のフォルダを保持したいとは指定していませんでした。私はそれを編集します。しかし、パフォーマンスが非常に異なる場合、私は31日間を無視することを選ぶかもしれません。 – LPChip

+0

あなたの質問には、最大31日間、空のディレクトリをツリーに残しておきたいという規定はありませんでした。それに応じてあなたの質問を編集して解決策としてあなた自身の答えを受け入れてください(https://stackoverflow.com/posts/46033592/edit)。 – Compo

関連する問題