当前位置:  开发笔记 > 开发工具 > 正文

如何在del失败时停止批处理脚本

如何解决《如何在del失败时停止批处理脚本》经验,为你挑选了2个好方法。

我们有一个删除files(del)和目录(rd)的批处理脚本.如果这些删除语句中的任何一个失败,有没有人知道如何暂停(失败)脚本的执行?如果文件/目录被Windows锁定,它们可能会失败.谢谢.

更新

我正在使用的陈述:

德尔: del *.* /S /Q

RD: FOR /D %%G in (*) DO RD /s /q %%G



1> Patrick Cuff..:

要删除文件,您可以先尝试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
)



2> Jason Punyon..:

如果文件被锁定,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
)

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有