我正在制作批处理脚本,部分脚本正在尝试删除目录及其所有子目录。 我得到一个关于不是空的子目录间歇性的错误。 我读了一篇关于索引是罪魁祸首的文章。 我禁用WSearch,但我最终再次得到错误。
rmdir /S /Q "C:\<dir>\"
我遇到了与Harry Johnston所提到的相同的问题。 rmdir /s /q
会抱怨一个目录不是空的,即使/s
是为了给你做清空! 我个人认为这是Windows中的一个bug。
我的解决方法是在删除目录本身之前删除目录中的所有内容:
del /f /s /q mydir 1>nul rmdir /s /q mydir
( 1>nul
隐藏del
的标准输出,否则它会列出它删除的每个文件。)
我熟悉这个问题。 最简单的解决方法是有条件地重复操作。 我从来没有看到它连续两次失败 – 除非实际上有一个打开的文件或权限问题,显然!
rd /s /qc:\deleteme if exist c:\deleteme rd /s /qc:\deleteme
我只是遇到了同样的问题,它不得不做一些文件丢失或损坏。 要解决这个问题,只需运行检查磁盘:
chkdsk /F e:
这可以从搜索窗口框或cmd提示符运行。 /F
修复它找到的任何问题,如恢复文件。 一旦这个完成运行,你可以像正常一样删除文件和文件夹。
正如@gfullam在对@BoffinbraiN的回答中所说的那样,你自己删除的<dir>
可能不是包含文件的那个:在<dir>
中可能有子目录中有一个“目录不是空的”消息,唯一的解决办法是递归迭代目录,手动删除所有包含的文件…我最终决定从UNIX使用rm
端口。 rm.exe
带有Git Bash,MinGW,Cygwin,GnuWin32等。 你只需要在PATH中有它的父目录,然后像在UNIX系统中一样执行。
批处理脚本示例:
set PATH=C:\cygwin64\bin;%PATH% rm -rf "C:\<dir>"
我可以想到以下可能的原因:
对于1),你可以尝试runas /user:Administrator
来获得更高的权限,或者通过上下文菜单以管理员身份启动批处理文件。 如果这没有帮助,甚至管理员也没有权利。 那么你需要接管目录的所有权。
对于2.)下载进程资源管理器 ,单击Find/Find handle or DLL...
或按Ctrl + F键入目录的名称,并找出谁使用它。 如果可能,关闭使用该目录的应用程序。
林我的情况下,我只是将文件夹移动到根目录像这样。
move <source directory> c:\
然后运行该命令来删除该目录
rmdir c:\<moved directory> /s /q
以下是对我有用的东西。 我看起来像RMDir命令将几乎所有的时间都会在RMDir命令上发出“目录不是空的”命令。
:Cleanup_Temporary_Files_and_Folders
擦除/ F / S / QC:\ MyDir
RMDir / S / QC:\ MyDir如果存在C:\ MyDir GoTo Cleanup_Temporary_Files_and_Folders
类似哈利约翰斯顿的答案,我循环,直到它的工作。
set dirPath=C:\temp\mytest :removedir if exist "%dirPath%" ( rd /s /q "%dirPath%" goto removedir )
jrose的解决方案chkdsk /F e:
部分为我工作。 运行后, del
和rmdir
继续失败,但只是删除在Explorer中的目录工作。