使用命令行完全删除 Windows 中的文件夹

Fra*_*ini 66 windows command-line

我需要删除一个包含其他文件夹和文件的文件夹。我试着delrmdir命令,但有时他们失败了一些错误行:[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)

跳过确认消息。

  • `rmdir /s` 将删除任何可以删除的内容。您可能拥有被程序锁定的文件、只读文件或需要管理权限才能删除的文件。没有一个命令可以为您处理所有这些情况 (2认同)
  • rmdir /S <directory> 正在删除目录以及子文件和目录。它还询问您确定吗?在 Windows 10 上。谢谢 (2认同)

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)

  • OT:这就是我讨厌窗户的原因。一切都是那么艰难。`rm -rf /directory/` 在所有操作系统上都应该是全局的。 (2认同)
  • 实际上有一个“暂停”命令;要暂停三秒钟,您可以使用:`timeout /t 3` (2认同)

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)

如果这仍然失败,那么要么您没有删除某些文件的权限,要么某些文件仍在使用中。


Har*_*ton 5

我相信 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)