0

我需要获取给定位置的空文件夹列表,然后是 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"

如何组合这两个命令?

4

2 回答 2

1

您最大的障碍是转义 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 天的空文件夹的,因为没有这样的要求,关于需要重新运行命令的部分没有实际意义,我已经删除暂时停止。

于 2019-06-27T18:05:00.273 回答
1

findstr "^"您需要转义部分的引号forfiles。有办法\",但我不推荐这样做,因为"命令解释器仍然可以识别cmd(用户Ben Personick在他的回答中展示了如何做到这一点)。无论如何,我会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 "^"你也可以使用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)"

注意:
forfiles仅考虑上次修改的日期(不是时间),而不考虑创建日期/时间。

于 2019-06-27T22:01:54.903 回答