无法弄清楚如何使用“ FORFILES”删除“ WIP”文件夹的子目录中的文件

时间:2018-11-01 21:35:04

标签: windows batch-file cmd

我无法弄清楚如何获取'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'做的事情?

1 个答案:

答案 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命令返回到原始目录。就像我在代码中使用一样。