![如何使批处理文件在出现错误时自动停止](https://linux22.com/image/517847/%E5%A6%82%E4%BD%95%E4%BD%BF%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E5%9C%A8%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%E6%97%B6%E8%87%AA%E5%8A%A8%E5%81%9C%E6%AD%A2.png)
有人知道是否存在与 Unix 出现错误“#!/bin/sh -e”时停止等效的 Windows 批处理文件吗?
答案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 时才执行同一行上的下一个命令。