2017-08-03 100 views
0

我正在寫一個批處理文件爲Windows 7的具體子目錄中的3歲文件的批處理文件寫一個刪除子目錄

我現在有一個刪除舊的備份從我們的主人文件夾我們的網站管理中的代碼文件夾。這是代碼:

for /d %%A in ("Y:\*.*") do del /s /q /f "%%A\masters\*.bak" 

不過,我需要它的代碼只能刪除事情是3歲以上,這將是該代碼:不過,我需要的是在頂

forfiles /P "Y:\" /S /D -1096 /M *.bak /C "cmd /C del @path" 

代碼,以便我可以從我們的173個站點管理文件夾中存在的masters文件夾中刪除所有* .bak文件。我把我的頭髮弄出來搞清楚了。我不能讓它從我們的其他文件夾中刪除* .bak文件。

我試着結合的代碼,但低於在批處理文件中的命令行不按預期方式工作:

forfiles /S /D -1096 /M *.bak /C "cmd /C for /d %%A in ("Y:\*.*") do del /s /q /f "%%A\masters\*.bak" 

如何3歲以上的任何位置刪除目錄樹,如果第二的所有* .bak文件在文件路徑中的目錄是masters,並保持所有其他* .bak文件更新或在文件路徑中第二個目錄不是masters的目錄中?

imgur.com/a/isTOm這裏是目錄。由於我在驅動器上的權限,我無法做出轉儲,所以這是我能做的最好的。

我該如何讓它從以下位置刪除: |美國 - 美國|加拿大| GME | GMIO | GMSA |墨西哥| 只有文件夾以及3歲或以上的6個目錄中的每個目錄中的站點文件夾中的WIP和MASTERS文件夾?

在此先感謝!

@Mofi試圖幫助我,但在工作之後他們改變了文件夾,MOFI建議我提出一個新問題,而不是編輯他自己的文件夾,How to delete *.bak files recursively older than a specific date depending on directory in file path?

+0

什麼是第三個指令 「不按預期工作」? (即它在做什麼與你期望做什麼?) –

+0

我想要它,所以它使用FORFILES命令刪除超過3年的.bak文件以及能夠像這樣去Y:\ GME \ 〜RandomSiteName〜\ Wip並刪除所有文件,併爲這6個區域文件夾中的每個站點文件夾執行此操作。以及爲站點文件夾中存在的Masters文件夾做同樣的事情。 我基本上試圖混合在一起的代碼,但我不能得到它的工作,以使用該文件夾通配符以及3年的要求。 –

+0

就像我不能讓它從我們的b盤中的bim360文件夾,FM文件夾或除Y盤上的區域文件夾中存在的站點目錄中存在的WIP和MASTER文件夾以外的任何文件夾中刪除東西。 –

回答

0

我用Document.txt並在批處理文件的頂部測試代碼以下批號:

@echo off 
if "%~1" == "#Delete:Backup#" (
    for /F "tokens=4 delims=\" %%I in ("%~2") do (
     if /I "%%I" == "masters" (
      ECHO del from line %Line%: "%~2" 
     ) else if /I "%%I" == "wip" (
      ECHO del from line %Line%: "%~2" 
     ) 
    ) 
    goto :EOF 
) 

set "Line=1" 
for /F "delims=" %%# in (Document.txt) do (
    call "%~f0" #Delete:Backup# "%%#" 
    set /A Line+=1 
) 

輸出是爲1219線Document.txt

del from line 19: "Y:\America - US\Milford\WIP\Site\29678-EDM\156400000-CS1-00.bak" 
del from line 20: "Y:\America - US\Milford\WIP\1908\20170721_05.59\156401908-IF1-L1.bak" 
del from line 21: "Y:\America - US\Milford\WIP\1908\20170721_05.59\156401908-AE1-L1.bak" 
del from line 22: "Y:\America - US\Milford\WIP\1908\20170721_05.59\30083-EDM\156401908-1500086IF1-L1.bak" 
del from line 34: "Y:\America - US\Milford\Masters\1908\156401908-AE1-L1.bak" 
del from line 48: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\156320005-IF1-01.bak" 
del from line 49: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\156320005-IF1-L1.bak" 
del from line 50: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\156320005-IF1-02.bak" 
del from line 51: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\156320005-IF1-03.bak" 
del from line 52: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\AEB cabinet modifications Duane\156320005-IF1-02_SOM.bak" 
del from line 53: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\AEB cabinet modifications Duane\156320005-IF1-L1_SOM.bak" 
del from line 54: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\AEB cabinet modifications Duane\156320005-IF1-01_SOM.bak" 
del from line 55: "Y:\America - US\Warren Tech Center\WIP\20005\20170804_09.09\AEB cabinet modifications Duane\156320005-IF1-03_SOM.bak" 
del from line 56: "Y:\America - US\Warren Tech Center\WIP\1971\30147-EDM\156301971-EL1-03.bak" 
del from line 57: "Y:\America - US\Warren Tech Center\WIP\1971\30147-EDM\156301971-EL1-02.bak" 
del from line 58: "Y:\America - US\Warren Tech Center\WIP\1971\30138-EDM\156301971-AC1-L1.bak" 
del from line 59: "Y:\America - US\Warren Tech Center\WIP\1971\30138-EDM\156301971-EL1-L1.bak" 
del from line 60: "Y:\America - US\Warren Tech Center\WIP\1971\30138-EDM\156301971-AE1-L1.bak" 
del from line 139: "Y:\America - US\Warren Tech Center\Masters\4606\156304606-IF1-L1g.bak" 
del from line 140: "Y:\America - US\Warren Tech Center\Masters\4606\156304606-IF1-L1f.bak" 
del from line 141: "Y:\America - US\Warren Tech Center\Masters\4606\156304606-IF1-L1.bak" 
del from line 142: "Y:\America - US\Warren Tech Center\Masters\9227\156309227-IF1-01.bak" 
del from line 143: "Y:\America - US\Warren Tech Center\Masters\20005\156320005-IF1-L1.bak" 
del from line 144: "Y:\America - US\Warren Tech Center\Masters\1971\156301971-IF1-L1w.bak" 
del from line 145: "Y:\America - US\Warren Tech Center\Masters\1971\156301971-IF1-L1e.bak" 
del from line 146: "Y:\America - US\Warren Tech Center\Masters\1971\156301971-IF1-L1.bak" 
del from line 147: "Y:\America - US\Warren Tech Center\Masters\1971\156301971-AC1-L1.bak" 
del from line 148: "Y:\America - US\Warren Tech Center\Masters\1971\156301971-EL1-L1.bak" 
del from line 149: "Y:\America - US\Warren Tech Center\Masters\1971\156301971-AE1-L1.bak" 
del from line 150: "Y:\America - US\Warren Tech Center\Masters\1958\156301958-IF1-02.bak" 
del from line 151: "Y:\America - US\Warren Tech Center\Masters\19867\156319867-IF1-09.bak" 
del from line 152: "Y:\America - US\Warren Tech Center\Masters\19867\156319867-IF1-02.bak" 
del from line 153: "Y:\America - US\Warren Tech Center\Masters\19867\156319867-IF1-06.bak" 
del from line 154: "Y:\America - US\Warren Tech Center\Masters\19867\156319867-IF1-07.bak" 
del from line 155: "Y:\America - US\Warren Tech Center\Masters\1963\156301963-IF1-02.bak" 
del from line 156: "Y:\America - US\Warren Tech Center\Masters\1979\156301979-AE1-01.bak" 
del from line 157: "Y:\America - US\Warren Tech Center\Masters\1979\156301979-IF1-01.bak" 

這看起來正確的因此使用的代碼是:

@echo off 
if "%~1" == "#Delete:Backup#" (
    for /F "tokens=4 delims=\" %%I in ("%~2") do (
     if /I "%%I" == "masters" (
      del "%~2" 
     ) else if /I "%%I" == "wip" (
      del "%~2" 
     ) 
    ) 
    goto :EOF 
) 

rem Other commands processing the parameters. 

%SystemRoot%\System32\forfiles.exe /P "Y:\" /S /D -1096 /M *.bak /C "%~f0 #Delete:Backup# @PATH" 

rem More commands executed after the deletion of the backup files. 

然後我可以在將來添加額外的目錄,因此比這更好的代碼結構將有助於您添加更多目錄。所以我想了一下,然後再次使用帶有完整路徑的1219 * .bak文件名使用Documen.txt進行了修改。

@echo off 
if "%~1" == "#Delete:Backup#" (
    for /F "tokens=4 delims=\" %%I in ("%~2") do (
     for %%J in (masters wip) do if /I "%%I" == "%%~J" ECHO del from line %Line%: "%~2" & goto :EOF 
    ) 
    goto :EOF 
) 

set "Line=1" 
for /F "delims=" %%# in (Document.txt) do (
    call "%~f0" #Delete:Backup# "%%#" 
    set /A Line+=1 
) 

該代碼產生與第一代碼完全相同的輸出。所以,你也可以使用:

@echo off 
if "%~1" == "#Delete:Backup#" (
    for /F "tokens=4 delims=\" %%I in ("%~2") do (
     for %%J in (masters wip) do if /I "%%I" == "%%~J" del "%~2" & goto :EOF 
    ) 
    goto :EOF 
) 

rem Other commands processing the parameters. 

%SystemRoot%\System32\forfiles.exe /P "Y:\" /S /D -1096 /M *.bak /C "%~f0 #Delete:Backup# @PATH" 

rem More commands executed after the deletion of the backup files. 

第三目錄級別的其他目錄可以在網上方便地添加masters wip

0

正如我所理解的任務:刪除路徑爲*\*\Masters的文件夾中的所有舊文件。

  1. 獲取與dir /S /B這將輸出全在遞歸當前路徑的所有文件夾的路徑 所有文件夾的完整路徑。

  2. 使用命令findstr /R /C:"Y:\\[^\\]*\\[^\\]*\\masters$"來過濾文件夾。它只會輸出 與reqexp匹配的路徑。請注意加倍的斜線。 [^\\]*\\[^\\]*\\masters$匹配恰好具有三個 層次結構部分並以masters結束的行。爲批量使用^符號 必須加倍,因爲它是特殊的轉義符號。

  3. 執行forfiles在找到的路徑

它用圖解的看起來像

for /f "delims=" %%f in ('dir masters /S /B ^| findstr /R /C:"Y:\\[^^\\]*\\[^^\\]*\\masters$"') do (
    :: %%f contains full path to "masters" folder 
    forfiles ... 
)