我需要删除一个包含其他文件夹和文件的文件夹。我试过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)"