【问题标题】:Get list of empty folders older then x days获取早于 x 天的空文件夹列表
【发布时间】:2019-06-27 16:52:24
【问题描述】:

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

如何组合这两个命令?

【问题讨论】:

  • 我正在删除bash 标签。我怀疑你的意思是batch

标签: batch-file cmd forfiles


【解决方案1】:

您需要将findstr "^" 部分的引号转义为forfiles。有\" 的方法,但我不建议这样做,因为命令解释器cmd 仍然可以识别"(尽管用户Ben Personick 显示了如何在his answer 中执行此操作)。无论如何,我会改用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)"

您也可以使用find /V "",而不是findstr "^"

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 只考虑上次修改的日期(不是时间),而不考虑创建日期/时间。

【讨论】:

  • 谢谢。它工作得很好。性能方面,有没有首选的解决方案?
  • 不是真的,因为forfiles 真的很慢,因为它会为每次循环迭代打开一个新的cmd 实例...
【解决方案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 天的空文件夹的,因为没有这样的要求,关于需要重新运行命令的部分是没有实际意义的,我'已经删除了现在。

【讨论】:

  • 很好的转义序列,+1!您应该将> nul 添加到findstr 以避免混淆输出,并且您可能应该删除rd,因为问题没有说明删除目录...
  • 谢谢,你回答的十六进制很有趣,我以前没见过,我以为只有 SET 会将十六进制解释为实际上是十六进制。您对删除的权利,我今天早上读到了,并且会发誓他要求删除空目录。
  • 十六进制。字符代码的符号0xHHforfiles-特定的--类型forfiles /?;尽管我不确定该命令的先前版本是否也具有此功能。哦,也许有点太早了......不,开玩笑......如果他们真的想删除空目录,他们不必检查它们是否为空,因为普通的rd 不会删除目录包含任何内容(但是如果一个目录只包含空目录怎么办:如果这些被删除,父级也是空的,所以也删除?无论如何,这是只有 OP 可以澄清的情况)......
  • 是的,我实际上开始在关于 RD 的原始帖子中注意到它,但认为没有必要,是的,对于空目录链,他们将不得不运行更多程序或添加更多逻辑。
  • 我猜你说的是forfiles /D +days指向未来,对吧?哦,是的,我讨厌这个缺陷!你说得对,robocopy 在这些事情上更好......
猜你喜欢
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
相关资源
最近更新 更多