我需要删除一个包含其他文件夹和文件的文件夹。我尝试了del
命令rmdir
,但有时它们会失败并显示一些错误行:[PATH]: The directory isn't empty.
还有其他好的办法吗?
答案1
我在使用自动构建脚本时经常遇到这种情况。
我猜原因可能是某个应用程序在该目录中打开了一个文件,并且使用了“共享删除”。也就是说,该应用程序允许删除该文件(这就是我认为 DeleteFile 调用不会失败的原因),但该文件只有在该应用程序关闭其句柄后才会消失。
这意味着当命令尝试删除文件夹时,文件可能仍在那里rmdir
,因此出现错误消息。此后不久,所述应用程序将关闭其句柄,文件将消失,当您检查文件夹以查看正在讨论哪个文件时,rmdir
它将是空的。
至少这是我的理论。
Harry Johnston 提出的解决方法看起来不错。只有我会在命令之间插入一个暂停rmdir
。当然,Windows 没有易于编写的“暂停”命令(更正:旧版 Windows 没有,新版有 - 请参阅评论)。但如果秒级粒度足够,则可以使用以下命令ping
创建暂停:
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
因此总计:
rd /s /q foo
:: retry once
if exist foo (
:: clear errorlevel
cmd /c
:: pause
ping -n 2 127.0.0.1 >nul
:: retry
rd /s /q foo
)
:: retry yet again
if exist foo (
cmd /c
ping -n 2 127.0.0.1 >nul
rd /s /q foo
)
:: give up
if exist foo {panic}
答案2
尝试:
rmdir /S your_directory
或者:
rmdir /S /Q your_directory
跳过确认信息。
答案3
您可能有一些只读文件,您可以使用 del /F 选项删除它们
del /S /F your_directory
rmdir your_directory
您可能还拥有一些隐藏文件,如果您确实要删除它们,那么您可以使用
del /S /F /AH your_directory
rmdir your_directory
如果仍然失败,则说明您没有权限删除某些文件,或者某些文件仍在使用中。
答案4
del
对里面的文件使用,然后rmdir
删除该文件夹。
要使用此rmdir
方法删除所有文件,请使用/S
开关前目录名称,并/Q
禁止提示删除。这是最好的方法,因为您不会错过任何文件。不过,使用 /Q 开关时要小心,因为它不会警告您系统或隐藏文件属性