在Windows中使用命令行
完全删除一个文件夹,我需要删除一个包含其他文件夹和文件的文件夹。我试过del
和rmdir
命令,但有时会出现一些错误行:[PATH]: The directory isn't empty.
有什么好的办法吗?
完全删除一个文件夹,我需要删除一个包含其他文件夹和文件的文件夹。我试过del
和rmdir
命令,但有时会出现一些错误行:[PATH]: The directory isn't empty.
有什么好的办法吗?
我猜测原因可能是某些应用程序在该目录下打开了一个文件,并带有 “共享删除"。也就是说,应用程序允许删除该文件(这就是为什么我认为DeleteFile调用不会失败的原因),但是只有在应用程序关闭了它的句柄之后,文件才会消失。
至少我的理论是这样的。只是我会在rmdir
命令之间插入一个停顿。当然,Windows并没有简单的脚本化的 "暂停 "命令(更正:古老的Windows版本没有,较新的版本有–见注释)。但如果秒的粒度足够大,可以用rmdir
来创建一个暂停:
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}
``` 所以总共:
&001
我相信在Windows 7(也许还有其他版本)有一个错误,有时会导致这种症状;也可能是第三方软件的错误。(你是否安装了赛门铁克的端点保护系统?)
总之,我经常遇到这种情况。在大多数情况下,可以通过连续运行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开关,因为它不会警告你系统或隐藏文件的属性。
如果你使用 node ,你可以使用 rimraf 依赖关系:
运行安装:* npm install rimraf -g
删除文件夹: rimraf SourceFolder
删除文件夹: &007
这对我在收到错误时有帮助:
源文件名大于文件系统支持的文件名
我认为可以这样使用:
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)"