如何使批处理文件在出现错误时自动停止

如何使批处理文件在出现错误时自动停止

有人知道是否存在与 Unix 出现错误“#!/bin/sh -e”时停止等效的 Windows 批处理文件吗?

http://www.turnkeylinux.org/blog/shell-error-handling

答案1

考虑到 Windows 中 shell 的设计(继承自 MS-DOS),确实没有什么好的方法来实现你想要的效果。

一般来说,即使出现错误,CMD.EXE 和 COMMAND.COM 也会继续执行批处理文件。检查errorlevel调用的程序就是处理错误的所有方法。大多数格式错误的 shell 命令将被视为要执行的程序(并且,希望执行的任何程序都不会做坏事)。

if exists或等结构语法错误for将导致 shell 停止执行脚本。考虑:

@echo off
if not exits c:\foo.txt echo C:\foo.txt does not exist
echo Continuing on

你永远看不到,Continuing on因为解释器会报错c:\foo.txt was unexpected at this time.。不幸的是,没有办法像 bash 那样捕获和处理错误。当你遇到这样的错误时,脚本就会停止运行。

总体来说,Windows shell 中的错误处理非常不复杂。

答案2

在发生错误时立即停止批处理的一种不太糟糕的方法是使用每个“指令”,例如:

复制 %UNEXISTING% C:\ || (Echo 错误文件 %UNEXISTING% 不存在 & EXIT /B 1)

使用 || 其余部分仅当前一个命令的错误级别不为 0 时才执行同一行上的下一个命令。

相关内容