我需要获取给定位置的空文件夹列表,该列表的年代早于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);
如何结合这两个命令?
答案 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)"
仅考虑上一次修改的日期(而不是时间),而不考虑创建日期/时间。