批处理 – 在rmdir命令中获取“目录不为空”

我正在制作批处理脚本,部分脚本正在尝试删除目录及其所有子目录。 我得到一个关于不是空的子目录间歇性的错误。 我读了一篇关于索引是罪魁祸首的文章。 我禁用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. 有需要更高权限的文件或子目录
  2. 有文件正在使用,不仅通过WSearch,但可能通过您的病毒扫描器或其他任何东西

对于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:部分为我工作。 运行后, delrmdir继续失败,但只是删除在Explorer中的目录工作。