【问题标题】:Getting File not found error when running Batch command to delete empty folders and subfolders运行批处理命令删除空文件夹和子文件夹时出现找不到文件错误
【发布时间】:2015-03-31 02:51:41
【问题描述】:

由于某种原因,当我运行此 DOS 命令删除空文件夹和子文件夹时,出现“找不到文件”错误。据我所知,它看起来是正确的。有人有什么建议吗?

for /f "delims=" %%x in (dir /s /b /ad ^| sort /r') do rd "%%x" 2>NUL

【问题讨论】:

  • sort /r 的目的是为for 提供按字母倒序排列的目录名称,因此最长的名称出现在列表的最前面。因此,首先遇到任何子目录的最深子目录。 `RD~ 尝试删除目录,只有目标目录为空才会成功,因此如果您有一个包含三个空子目录的子目录,那么这三个将被删除,然后才会处理和删除父目录如果现在为空。
  • dir 之前添加开场引号应该可以解决问题,但由于它没有,您需要进一步研究。目录可能被视为不可删除的两个原因是它实际上包含不可见的文件(通常是 thumbs.db),您可以在相应的子目录中使用 attrib * 找到这些文件,以及您无权删除的权限问题目录。使用dir /q 查看权限。

标签: batch-file batch-processing


【解决方案1】:

您在 dir 前面缺少一个勾号 (')。试试这个:

for /f "delims=" %%x in ('dir /s /b /ad ^| sort /r') do rd "%%x" 2>NUL

这样更干净

for /f "delims=" %%x in ('dir /b /ad') do echo.rd /s /q "%%x"

消除回声。仅当结果看起来正确时。

【讨论】:

  • 谢谢!谢谢摆脱了我的错误,但它没有删除空文件夹。有什么想法吗?
  • 我认为您不需要排序(没关系)。此外,我会将 /S 放在 RD 上而不是放在 dir 上(可能更快)。见 RD/?。请参阅我的更新答案。我省略了 2>NUL,因此您可以看到任何错误。
  • 这是一个非常非常糟糕的想法。 rd /s /q 旨在删除整个目录子树不管是否为空。
  • @Magoo...你是对的!我认为这就是操作人员想要的,而他只是在处理空文件夹时遇到了麻烦。当我再次阅读时,我认为您可能是对的,并且操作员只是试图删除空文件夹……尽管原始代码也没有为空文件夹提供任何规定。对不起:(
猜你喜欢
  • 2021-10-15
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 2013-10-19
  • 2014-02-10
相关资源
最近更新 更多