我无法弄清楚如何获取'FORFILES'来删除扩展名为'.bak'的文件,该文件已经存在3年了,并且只能在属于WIP文件夹的子目录下查找。
@ECHO OFF
setlocal enableextensions disabledelayedexpansion
forfiles /P "Y:\Africa" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO AFRICA - COMPLETED
Echo.
forfiles /P "Y:\Asia" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO ASIA - COMPLETED
Echo.
forfiles /P "Y:\Australia" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO AUSTRAILIA - COMPLETED
Echo.
forfiles /P "Y:\Europe" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO EUROPE - COMPLETED
Echo.
forfiles /P "Y:\North America\Canada" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO CANADA - COMPLETED
Echo.
forfiles /P "Y:\North America\Mexico" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO MEXICO - COMPLETED
Echo.
forfiles /P "Y:\North America\United States" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO UNITED STATES - COMPLETED
Echo.
forfiles /P "Y:\South America" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO SOUTH AMERICA - COMPLETED
Echo.
Pause
Goto :Selection
当前代码将进入每个文件夹。在每个子目录中搜索每个超过3年的'.bak'文件。但是我只希望它只在文件夹及其子目录中查找,如果该文件夹被称为WIP,只是为了将脚本运行时间缩短半小时。
在WIP文件夹之外,没有任何适用于这些条件的要删除的内容,因为我正在编写的实用程序中的OTHER代码已经处理了MASTERS等文件夹中的“ .bak”文件(我们不在乎它们是否年龄是否为3岁,则“ .bak”不属于该年龄,也不需要)。但是,如果WIP文件夹之外的某些内容适用于代码中已设置的条件,则如果它的LOCKED(我们对WIP文件夹文件不执行的操作)处于锁定状态,它将锁定脚本并挂起“拒绝访问” “ ...)
我会举一个例子 非洲有:
Y:\Africa\Egypt\wip
Y:\Africa\Kenya\WIP
Y:\Africa\South Africa\WIP
亚洲有很多与单个国家/地区一样的文件夹,例如非洲有,中国有4个文件夹,其中有WIP文件夹。 像这样设置了许多带有区域标签的文件夹。 是否有可能进入每个路径并跳到一个子目录,直到它碰到一个WIP文件夹?例如'%% A通配符'或类似您可以使用'FOR'做的事情?
答案 0 :(得分:2)
您只需要一种机制来检查当前工作目录是否以wip
结尾。有几种不同的方法可以执行此操作,但是我选择使用FOR /D /R
命令,然后检查子目录是否等于wip
。
@echo off
for /d /r %%G in (wip*) do IF /I "%%~nxG"=="wip" (
PUSHD "%%G"
forfiles /M *.bak /D -1095 /C "cmd /c Del @path"
popd
)
您可以将其放在Y:驱动器的根目录中,它只会处理以wip结尾的目录
如果无法从数据所在的根目录运行批处理文件,可以通过三种方法将脚本更改为其他目录。
如果您只想更改为其他驱动器号,请使用冒号指定驱动器号
Y:
您也可以使用CD
命令。更改目录的缩写。
CD mydirectory
如果需要同时更改目录和驱动器号,则需要在/D
命令中使用CD
选项。
CD /D Y:\mydirecotry
最后但并非最不重要的一点是,因为这是我最喜欢的方法,是使用PUSHD
命令。
PUSHD Y:\somedirectory
但是,如果使用PUSHD
命令,则需要使用POPD
命令返回到原始目录。就像我在代码中使用一样。