使用 FORFILES 删除超过 2 天的文件夹

use*_*512 1 windows-7 batch command-line

这是我想要做的:

在 .cmd 脚本中使用 forfiles 命令从指定路径中删除比 win7 机器上早于 2 天的文件夹。

编辑: 路径 X 下的情况如下:\backups 是包含每日备份的文件夹,例如 25.06.2014 下一个文件夹 24.06.2014 等等。

我现在对此的问题是:

  • /d 在帮助中总是强调 --files--。所以我不确定这是否也适用于文件夹。
  • 特别是我不确定它与 /s 结合会做什么。所以它只会遍历文件夹并删除文件 - 但如果父文件夹已经太旧怎么办?在旁注中,递归的整个概念对我来说并不清楚,这意味着我无法找到。这只是意味着通过文件夹对吗?
  • 如果我要使用 IF 语句,那么我将不得不使用 2 个变量 @ISDIR 和 @FDATE。使用此解决方案,我不知道如何在 forfiles 命令中组合 2 个 If-Statements,另外我不确定 @FDATE 是否再次仅用于文件而不是文件夹。

那么如何正确操作呢?

forfiles 的参考:http ://technet.microsoft.com/de-de/library/cc753551%28v=ws.10%29.aspx

你好!

and*_*415 6

解决方案

尽管它的名字,该forfiles命令能够处理文件文件夹。这是一个完成这项工作的批处理脚本:

@echo off
setlocal

set target=X:\backups
set days=-2

for /f "usebackq delims=" %%G in (
`forfiles /p "%target%" /c "cmd /c if /i @isdir == true echo @path" /d %days% 2^>nul`
) do echo rd /s /q "%%~G"

pause
endlocal & exit /b
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

首先,初始化targetdays变量。第一个设置为您要扫描的文件夹,后者是天数。负值意味着早于或等于

forfiles然后通过指定之前设置的文件夹和天数来运行该命令。对于每个结果,@isdir检查特殊变量:如果值是true当前条目是文件夹,@path则回显其。然后解析命令输出以获取所有匹配的文件夹并删除它们。出于安全原因,还有一个额外的echo命令,您可以检查是否删除了正确的文件夹。

使用递归开关 ( /s) 时,将处理所有文件、文件夹及其子文件夹。在这种情况下,您不想;否则,您最终可能会删除新文件夹中包含的旧子文件夹,而这些子文件夹根本不应被触及。

进一步阅读