我正在制作批处理脚本,该脚本的一部分正在尝试删除目录及其所有子目录。我收到有关子目录不为空的间歇性错误。我读了一篇有关索引是罪魁祸首的文章。我禁用了WSearch,但最终还是再次出现该错误。这是命令:
rmdir /S /Q "C:\<dir>\"
Answers:
我遇到了哈里·约翰斯顿(Harry Johnston)提到的相同问题。rmdir /s /q
会抱怨目录不是空的,即使它/s
是为您清空的!我个人认为这是Windows中的错误。
我的解决方法是del
删除目录本身之前对目录中的所有内容进行处理:
del /f /s /q mydir 1>nul
rmdir /s /q mydir
(1>nul
隐藏标准输出,del
因为否则它将列出删除的每个文件。)
mydir
产生相同的“非空”错误的情况。因此,我也必须cd
进入每个目录中的文件mydir
并对其执行del
。最终它成功了,但是如果我不得不在另一个子级别上第三次重复该过程,那我会觉得很失败。
del /s
那样
rd /s /q mydir
命令即可完成删除工作。
我对这个问题很熟悉。最简单的解决方法是有条件地重复该操作。我从未见过它连续两次失败-除非实际上确实存在打开文件或权限问题!
rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme
IF EXIST
皮Access is denied
等情况。我DIR c:\deleteme
在一切之前添加了类似东西和错误检查。
我有“ C:\ Users \用户名\ OneDrive \ Fonts”,它被mklinked(/ D)到“ C:\ Windows \ Fonts”,并且遇到了同样的问题。就我而言
cd“ C:\ Users \ User Name \ OneDrive”
rd / s字体
Y(确认动作)
帮助过我。希望对您有帮助; D
我的情况下,我只是像这样将文件夹移到根目录。
move <source directory> c:\
然后运行命令删除目录
rmdir c:\<moved directory> /s /q
rmdir c:\<moved directory> /s /q
是正确的答案
Windows有时会被“设计破坏”,因此您需要创建一个空文件夹,然后使用备份模式将“破碎文件夹”镜像为“空文件夹”。
robocopy - cmd copy utility
/copyall - copies everything
/mir deletes item if there is no such item in source a.k.a mirrors source with
destination
/b works around premissions shenanigans
像这样创建一个空目录:
mkdir empty
像这样用空的覆盖损坏的文件夹:
robocopy /copyall /mir /b empty broken
然后删除该文件夹
rd broken /s
rd empty /s
如果这样做没有帮助,请尝试通过单击“重新启动”时按住shift并尝试在恢复模式下再次运行这些命令来在“具有命令提示符的恢复模式下”重新启动
/W:0
以避免不必要的延迟。您可能不需要,/b
因为这需要管理权限。恢复模式与该问题无关,因为我们正在谈论的是批处理脚本,而不是有人手动尝试删除目录。
我可以想到以下可能的原因:
对于1.),您可以尝试 runas /user:Administrator
以获取更高的权限,或者通过上下文菜单以管理员身份启动批处理文件。如果那没有帮助,那么甚至管理员也没有权限。然后,您需要接管目录的所有权。
对于2.)下载Process Explorer,单击Find/Find handle or DLL...
或按Ctrl+F,输入目录的名称并找出谁使用它。如果可能,请关闭使用该目录的应用程序。