我需要删除一个包含其他文件夹和文件的文件夹。我试过del和rmdir命令,但有时它们会因一些错误而失败:[PATH]: The directory isn't empty.
有什么好的选择吗?
我需要删除一个包含其他文件夹和文件的文件夹。我试过del和rmdir命令,但有时它们会因一些错误而失败:[PATH]: The directory isn't empty.
有什么好的选择吗?
Answers:
我的自动构建脚本经常发生在我身上。
我想原因可能是某些应用程序在该目录中使用“共享删除”打开了文件。即应用程序允许删除文件(这就是为什么我认为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}
              timeout /t 3
                    pause命令)。
                    尝试:
rmdir /S your_directory
要么:
rmdir /S /Q your_directory 
跳过确认消息。
del,rmdir什么也没问,它们只是发出一些行,如描述中的行。
                    rmdir /s将删除所有可能删除的内容。您可能拥有被程序锁定的文件,只读文件或需要管理员权限才能删除的文件。没有一个命令可以为您解决所有这些情况
                    我相信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
              使用del里面的文件,然后rmdir删除文件夹。
要使用该rmdir方法也删除所有文件,请在目录名称前使用/S开关,并禁止提示删除。这是最好的方法,因为您不会丢失任何文件。但是请小心使用/ Q开关,因为它不会警告您系统或隐藏文件属性/Q
Windows的旧版本文件夹(DOS,Windows 95/98 / ME)DELTREE等效于RM或RMDIR。我DELTREE在Windows 7工作站上使用批处理文件就可以了。
Deletes a directory and all the subdirectories and files in it.
To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]
  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.
Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.
              我认为您可以像这样使用它:
msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"