2017-11-03 17 views
0

ファイルの種類(つまり「.bak」)を削除する1つのバッチファイルを作成したいと思います。同一のパテントフォルダですが、私は少数のフォルダをリストアップすることができます。選択した数から離れてすべてのサブディレクトリから削除する方法

私は以下のスクリプトを使用して、一定の年齢の上に任意の「* .BAK」ファイルを削除、(ディレクトリが変数に設定されている)特定のディレクトリで検索するFORループを作成するために管理している:

SET "WeeklyBAKLocation=Folder20 Folder21 Folder25 Folder28" 
SET WeeklyBAK=7 
SET DailyBAK=3 

FOR %%x IN (%WeeklyBAKLocation%) DO forfiles /p "%%x" /s /m *.bak /d -%WeeklyBAK% /c "cmd /c DEL @path /q" 

<SECOND FOR LOOP below HERE> 

これらのフォルダで7日以上経過した.bakファイルを削除すると、私の質問は、最初のものから削除されていないものを削除せずに、3日以上経過したディレクトリごとに '.bak'クエリ?

findstr/vを使って次のように入れ子にしてみました(しかし、その1ループの各ディレクトリを無視して次のループのために削除してしまいます。働いて、大規模な非効率的ですか?)3日経過しているものだけを削除するファイルを.BAK見つけるために、それらを介して歩いているとき

SET "WeeklyBAKLocation=Folder20 Folder21 Folder25 Folder28" 
SET WeeklyBAK=7 
SET DailyBAK=3 

<First FOR LOOP above HERE> 

FOR %%x IN (%WeeklyBAKLocation%) DO FOR /F "delims=*" %%G IN ('dir /b /s "%~dp0" ^| findstr /v "\%%x"') DO forfiles /p "%%G" /s /m *.bak /d -%DailyBAK% /c "cmd /c ECHO @path /q" 

は基本的に私は一度にいくつかのディレクトリを無視することができます。

事前に感謝します。

答えて

0
FOR /F "delims=*" %%G IN (
'dir /b /s /AD "%~dp0" ^| findstr /v "\%%x"') DO (
set "zapme=Y" 
FOR %%x IN (%WeeklyBAKLocation%) DO if /i "%%x"=="%%G" set "zapme=" 
if defined zapme forfiles /p "%%G" /s /m *.bak /d -%DailyBAK% /c "cmd /c ECHO @path /q" 
) 

は、ディレクトリがを処理し、それは場合は、何もzapmeを設定することがされていないかどうかを確認し、基本的な形でのディレクトリのリストを読み込む(/adに注意)し、各ディレクトリのために、に何かzapmeを設定しましたそれらのディレクトリの1つ。 zapmeフラグは、設定されているかどうかをテストできます。設定されている場合は、ディレクトリを処理してください。


FOR /F "delims=*" %%G IN (
'dir /b /AD "%sourcedir%"') DO (
    set "zapme=Y" 
    FOR %%x IN (%WeeklyBAKLocation%) DO if /i "%%x"=="%%G" set "zapme=" 
    if defined zapme ECHO forfiles /p "%sourcedir%\%%G" /s /m *.bak /d -%DailyBAK% /c "cmd /c ECHO @path /q" 
) 

...

+0

...私は実際にそれをテストしていないたびに発生残念ながら、これはまだすべてのディレクトリ内の古い.BAKファイルを検索し、任意のは、で定義されて排除するものではなく、 %WeeklyBAKLocation%変数 –