2017-08-03 51 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 ... 
)