我们有一个删除files(del
)和目录(rd
)的批处理脚本.如果这些删除语句中的任何一个失败,有没有人知道如何暂停(失败)脚本的执行?如果文件/目录被Windows锁定,它们可能会失败.谢谢.
更新
我正在使用的陈述:
德尔: del *.* /S /Q
RD: FOR /D %%G in (*) DO RD /s /q %%G
要删除文件,您可以先尝试ren
(重命名)该文件.
ren
如果文件被锁定,将ERRORLEVEL设置为1.在文件名周围添加引号.
@echo OFF :: Delete all files, but exit if a file is locked. for %%F in (*.*) do ( @echo Deleting %%F ren "%%F" tmp 2> nul if ERRORLEVEL 1 ( @echo Cannot delete %%F, it is locked. exit /b 1 ) del tmp )
我怀疑你可能能为目录做同样的事情,但我似乎无法弄清楚如何锁定目录以便我可以测试.以下可能有效:
:: Remove all directories, but exit if one is locked. FOR /D %%G in (*) DO ( @echo Removing %%G ren "%%G" tmpdir 2> nul if ERRORLEVEL 1 ( @echo Cannot remove %%G, it is locked exit /b 1 ) RD /s /q tmpdir )
如果文件被锁定,DEL不会返回错误级别.我刚用excel文件做了一个测试,我看到了零(在Windows XP上).
在执行删除操作后,使用IF EXIST删除文件可能会更好.
del file.txt if exist file.txt ECHO "FAIL"
编辑后 免责声明:我不知道这是如何表现的......
您可以为文件执行此操作
DIR /B /S /A-d > c:\filestodelete.txt del *.* /S /Q FOR /F %%i in (c:\filestodelete.txt) DO ( IF EXIST %%i ECHO %%i STILL EXISTS )
然后是目录
DIR /B /S /Ad > c:\directoriestodelete.txt FOR /D %%G in (*) DO RD /s /q %%G FOR /F %%i in (c:\directoriestodelete.txt) DO ( IF EXIST %%i ECHO %%i STILL EXISTS )