批处理 - 在rmdir命令上获取"目录不为空"

May*_*hem 75 windows batch-file

我正在制作批处理脚本,部分脚本正在尝试删除目录及其所有子目录.我收到关于子目录不为空的间歇性错误.我读了一篇关于索引是罪魁祸首的文章.我禁用了WSearch,但最终我又得到了错误.

rmdir /S /Q "C:\<dir>\"
Run Code Online (Sandbox Code Playgroud)

Bof*_*ain 63

我遇到了与哈里约翰斯顿提到的相同的问题.rmdir /s /q会抱怨目录不是空的,即使/s是为你做空的!我个人认为这是Windows中的一个错误.

我的解决方法是del在删除目录之前对目录中的所有内容:

del /f /s /q mydir 1>nul
rmdir /s /q mydir
Run Code Online (Sandbox Code Playgroud)

(1>nul隐藏标准输出,del否则,它会列出它删除的每个文件.)


Har*_*ton 41

我很熟悉这个问题.最简单的解决方法是有条件地重复操作.我从来没有看到它连续两次失败 - 除非实际上有一个打开的文件或权限问题,显然!

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
Run Code Online (Sandbox Code Playgroud)

  • 神圣的莫莉,这没有任何意义,但它有效.什么#!%#@!微软 (8认同)

小智 18

我刚遇到同样的问题,它与一些丢失或损坏的文件有关.要解决此问题,只需运行检查磁盘:

chkdsk /F e:
Run Code Online (Sandbox Code Playgroud)

这可以从搜索窗口框或cmd提示符运行.该/F修复它发现,像恢复文件的任何问题.一旦完成运行,您可以像平常一样删除文件和文件夹.

  • 完美,我从半小时开始就在尝试 (2认同)

小智 18

以管理员身份输入命令提示符并运行

rmdir /s <FOLDER>
Run Code Online (Sandbox Code Playgroud)

  • 这与 OP 所做的没有什么不同。 (10认同)

Gri*_*118 8

我有一个类似的问题,试图通过 Windows 资源管理器删除一个空文件夹。向我展示了非空错误,所以我想我是通过 admin cmd 尝试的,但这里的答案都没有帮助。

在我将文件移动到空文件夹后。我能够删除非空文件夹

  • 请写在评论中。 (2认同)
  • 天哪,这实际上是所有其他解决方案中唯一有效的想法! (2认同)

Dan*_*rde 6

就我而言,我只是将文件夹移动到根目录,就像这样。

move <source directory> c:\
Run Code Online (Sandbox Code Playgroud)

然后运行命令删除目录

rmdir c:\<moved directory> /s /q
Run Code Online (Sandbox Code Playgroud)

  • `rmdir c:\&lt;移动目录&gt; /s /q` 是正确的答案 (3认同)
  • 这不是正确的答案。删除根目录中的文件夹可能会导致相同的消息:文件夹不为空。 (2认同)

Gob*_*obe 6

正如 @gfullam 在对 @BoffinbraiN 的回答的评论中所述,<dir>您要删除的本身可能不是包含文件的目录:其中可能有子目录<dir>收到“目录不为空”消息,唯一的解决方案是递归地迭代目录,手动删除所有包含的文件......我最终决定使用rmUNIX的端口。rm.exe附带了 Git Bash、MinGW、Cygwin、GnuWin32 等。您只需将其父目录放在 PATH 中,然后像在 UNIX 系统中一样执行即可。

批处理脚本示例:

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"
Run Code Online (Sandbox Code Playgroud)


Tho*_*ler 0

我认为可能的原因有以下几种:

  1. 有文件或子目录需要更高的权限
  2. 有文件正在使用,不仅是 WSearch,而且可能是您的病毒扫描程序或其他任何东西

对于1.),您可以尝试runas /user:Administrator获得更高的权限或通过上下文菜单以管理员身份启动批处理文件。如果这没有帮助,也许连管理员都没有权限。然后你需要接管该目录的所有权。

对于 2.) 下载Process Explorer,单击Find/Find handle or DLL...或按Ctrl+F,键入目录名称并找出使用它的人。如果可能,请关闭使用该目录的应用程序。