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

时间:2014-04-08 21:07:07

标签: windows batch-file

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

rmdir /S /Q "C:\<dir>\"

15 个答案:

答案 0 :(得分:59)

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

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

del /f /s /q mydir 1>nul
rmdir /s /q mydir

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

答案 1 :(得分:37)

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

rd /s /q c:\deleteme
if exist c:\deleteme rd /s /q c:\deleteme

答案 2 :(得分:18)

我刚刚遇到了同样的问题,它与一些丢失或损坏的文件有关。要解决此问题,只需运行check disk:

chkdsk /F e:

可以从搜索窗口框或cmd提示符运行。 /F修复了找到的任何问题,例如恢复文件。一旦完成运行,您可以像平常一样删除文件和文件夹。

答案 3 :(得分:13)

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

rmdir /s <FOLDER>

答案 4 :(得分:3)

正如@gfullam在对@ BoffinbraiN的回答中所说的那样,你要删除的<dir>可能不是包含文件的那个:<dir>中可能有子目录a&#34;目录不为空&#34;消息,唯一的解决方案是递归迭代目录,手动删除所有包含的文件...我最终决定使用UNIX的rm端口。 rm.exe附带Git Bash,MinGW,Cygwin,GnuWin32等。您只需要在PATH中拥有其父目录,然后像在UNIX系统中那样执行。

批处理脚本示例:

set PATH=C:\cygwin64\bin;%PATH%
rm -rf "C:\<dir>"

答案 5 :(得分:3)

我有“ C:\ Users \用户名\ OneDrive \ Fonts”,它被mklinked(/ D)到“ C:\ Windows \ Fonts”,并且我遇到了同样的问题。就我而言

  

cd“ C:\ Users \ User Name \ OneDrive”

     

rd / s字体

     

Y(确认操作)

帮助了我。希望对您有帮助; D

答案 6 :(得分:2)

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

将文件移入空文件夹后。我能够删除非空文件夹

答案 7 :(得分:1)

我是我的情况我只是将文件夹移动到根目录。

move <source directory> c:\

然后运行命令删除目录

rmdir c:\<moved directory> /s /q

答案 8 :(得分:1)

对我有用的是以下内容。我看起来像RMDir命令几乎一直发出“目录不为空”...

:Cleanup_Temporary_Files_and_Folders

Erase /F /S /Q C:\MyDir

RMDir /S /Q C:\MyDir
If  Exist  C:\MyDir  GoTo Cleanup_Temporary_Files_and_Folders

答案 9 :(得分:1)

rd /s拒绝删除某些文件的原因很可能是由于目录中文件的READONLY文件属性。

解决此问题的正确方法是,确保首先重置所有文件的属性:

attrib -r %directory% /s /d
rd /s %directory%

可能还有其他文件,例如隐藏文件或系统文件,因此,如果您想安全播放它:

attrib -h -r -s %directory% /s /d
rd /s %directory%

答案 10 :(得分:0)

我可以想到以下可能的原因:

  1. 有些文件或子目录需要更高的权限
  2. 有些文件正在使用中,不仅是WSearch,还有你的病毒扫描程序或其他任何东西
  3. 对于1.)您可以尝试runas /user:Administrator以获得更高的权限或通过上下文菜单以管理员身份启动批处理文件。如果这没有帮助,甚至管理员也可能没有权利。然后你需要接管目录的所有权。

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

答案 11 :(得分:0)

类似于Harry Johnston的回答,我循环直到它起作用。

set dirPath=C:\temp\mytest
:removedir
if exist "%dirPath%" (
    rd /s /q "%dirPath%" 
    goto removedir
)

答案 12 :(得分:0)

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并尝试在恢复模式下再次运行这些命令,尝试在“具有命令提示符的恢复模式”下重新启动

答案 13 :(得分:-1)

"firebase": "^4.10.1"

这对我有用。

答案 14 :(得分:-2)

这是因为您在目录中。确保您的CLI和资源管理器不在目录中。确保关闭所有它们。然后以管理员身份运行,cd到父目录并运行:

rmdir /s /q mydir