Fra*_*ini 66 windows command-line
我需要删除一个包含其他文件夹和文件的文件夹。我试着del和rmdir命令,但有时他们失败了一些错误行:[PATH]: The directory isn't empty.
有什么好的替代方案吗?
小智 66
尝试:
rmdir /S your_directory
Run Code Online (Sandbox Code Playgroud)
或者:
rmdir /S /Q your_directory
Run Code Online (Sandbox Code Playgroud)
跳过确认消息。
Pau*_*oke 17
我的自动构建脚本经常发生这种情况。
我想原因可能是某些应用程序在该目录中打开了一个带有“共享删除”的文件。即应用程序允许删除文件(这就是我认为 DeleteFile 调用不会失败的原因),但该文件只会在所述应用程序关闭其句柄后消失。
这意味着当rmdir命令尝试删除文件夹时,文件可能仍然存在,因此会出现错误消息。不久之后,所述应用程序将关闭它的句柄,文件将消失,当您检查文件夹以查看rmdir正在讨论的文件时,它将为空。
至少这是我的理论。
Harry Johnston 提出的解决方法看起来不错。只有我会在rmdir命令之间插入一个暂停。当然,Windows 没有易于编写脚本的“暂停”命令(更正:古代 Windows 版本没有,新版本有 - 请参阅评论)。但是如果秒粒度足够,可以ping用来创建暂停:
ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul
Run Code Online (Sandbox Code Playgroud)
所以总的来说:
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}
Run Code Online (Sandbox Code Playgroud)
sgm*_*ore 12
您可能有一些只读文件,您可以使用 del /F 选项来摆脱它们
del /S /F your_directory
rmdir your_directory
Run Code Online (Sandbox Code Playgroud)
您还可以有一些隐藏文件,如果您真的确定要删除它们,那么您可以使用
del /S /F /AH your_directory
rmdir your_directory
Run Code Online (Sandbox Code Playgroud)
如果这仍然失败,那么要么您没有删除某些文件的权限,要么某些文件仍在使用中。
我相信 Windows 7(可能还有其他版本)中存在一个错误,有时会导致此症状;或者它可能是第三方软件中的错误。(您是否有任何机会安装了 Symantec Endpoint Protection?)
无论如何,我经常遇到它。在大多数情况下,可以通过连续运行rd /s /q两到三次来解决问题。
如果这是在批处理文件中,您可以执行以下操作:
rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
378373 次 |
| 最近记录: |