获取 x 天之前的空文件夹列表

Get list of empty folders older then x days

我需要获取给定位置的空文件夹列表,这些文件夹早于 x 天。使用 "forfiles" 我可以获取所有旧文件夹,但不能获取空文件夹。使用 "for" 我可以获得所有空文件夹,但我似乎无法设置旧文件夹。

获取空文件夹:

@for /r "c:\FileStore" /d %F in (.) do @(dir /b "%F" | findstr "^" >nul || echo %~fF)

获取旧文件夹:

 ForFiles /p "C:\FileStore" /s /d -3 /c "cmd /c if @isdir==TRUE echo @path"

如何组合这 2 个命令?

您最大的障碍是转义 FindStr 中的双引号和 Carrot 也需要加倍(否则它将阻止以下引号被转义。)

嗯奇怪我以为你要求删除这些目录,因为你没有我会这样修改它。

ForFiles /P "c:\FileStore" /d -3 /C "CMD /C if @isdir==TRUE ( DIR /B @Path | FindStr \"^^\" >NUL || ECHO Empty Folder: @Path )"

此外,由于您只是在寻找这些列表,因此终止 FindStr 的输出确实有意义,因此我添加了 >Nul

再次不确定我是怎么想到要删除超过 3 天的空文件夹的,因为没有这样的要求,关于需要 re-run 命令的部分没有实际意义,我暂时删除了它。

您需要将 findstr "^" 部分的引号转义为 forfiles。有方法 \",但我不推荐这个,因为 " 仍然被命令解释器 cmd 识别(尽管用户 Ben Personick shows how to do this in )。无论如何,我会使用 0x22 来隐藏 cmd 中的引号,如下所示:

forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | findstr 0x22^0x22 > nul || echo @PATH)"

而不是findstr "^" you could also use find /V ""

forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | find /V 0x220x22 > nul || echo @PATH)"

但最简单的方法是使用 set /P:

forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | set /P _= || echo @PATH)"

N。 B.:
forfiles只考虑最后一次修改的日期(不是时间),不考虑创建date/time.