获取早于x天的空文件夹列表

时间:2019-06-27 16:52:24

标签: batch-file cmd forfiles

我需要获取给定位置的空文件夹列表,该列表的年代早于x天。使用“ forfiles”,我可以获得所有较旧的文件夹,但没有空文件夹。使用“ for”,我可以获取所有空文件夹,但似乎无法设置较旧的文件夹。

获取空文件夹:

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

获取旧文件夹:

var policyExecutionContext = new Context("myCacheEntryKey");
var response = await _cachePolicy.ExecuteAsync(
(context) => httpClient.GetAsync(uri), policyExecutionContext);

如何结合这两个命令?

2 个答案:

答案 0 :(得分:1)

您最大的障碍是转义FindStr中的双引号和同样需要加倍的胡萝卜(否则它将阻止以下引号被逃逸。)

奇怪,我以为您要求删除这些目录,因为您还没有将其修改过。

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

此外,由于您仅在查找其中的一个列表,因此杀死FindStr的输出确实很有意义,因此我重新添加了>Nul

再次不确定我想如何删除早于3天的空文件夹,因为没有这样的要求,所以有关重新运行命令的部分是无聊的,我现在已经删除了。

答案 1 :(得分:1)

您需要将findstr "^"的{​​{1}}引号引起来。 forfiles是一种方法,但我不建议这样做,因为\"仍可被命令解释器"识别(用户Ben Personick在{ {3}})。无论如何,我将使用cmd来隐藏0x22中的引号,如下所示:

cmd

您也可以使用his answer代替findstr "^"

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

但是最简单的方法是使用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)"

N。 B。:
forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | set /P _= || echo @PATH)" 仅考虑上一次修改的日期(而不是时间),而不考虑创建日期/时间。