为探究 ‘在批处脚本中如何可靠使用 errorlevel 判断系统内置或第三方应用的运行结果返回码’,查看了有关人气较高的老帖,其中列出三篇供有兴趣者参考
2008年老帖》https://devblogs.microsoft.com/oldnewthing/20080926-00/?p=20743
2013年老帖》http://steve-jansen.github.io/gu ... 3-return-codes.html
2012年老帖》https://stackoverflow.com/questi ... -windows-batch-file
至此总算有了一个要点小结(仅供参考):
一。订正7楼的说法,errorlevel 其实是系统维护的一个内置变量,用于捕获系统或第三方应用程序的运行结果返回码,与可在批处脚本中自定义的%errorlevel%不是一回事,并与是否在复合语块内使用无关。
二。if errorlevel n 用于判断系统或第三方应用程序的运行结果返回码,应该从非零值起验,如已知 find.exe 的成功/失败返回码=0/1- @echo off &for %%s in ("$$$.txt" "###.txt") do (
- echo,%%s|find "#" 2>nul >nul
- if errorlevel 1 (echo,"errorlevel = 1") else (echo,"errorlevel = 0")
- )
- pause&exit/b
复制代码 三。若系统或第三方应用程序的运行结果返回码不止0/1,if errorlevel n 判断式则应从较高值起验,如
if errorlevel 9 goto ...
if errorlevel 8 goto ...
四。由于 if errorlevel n 判断式中的 n 是等式判断,故可采用自定义变量 %errorlevel% 自动接收 errorlevel 即时传值并实现不等式判断,但前提是%errorlevel% 未被预先赋值,因此在复合语块中采用此法,就要启用延迟变量 !errorlevel! 而非 %errorlevel%,如- @echo off &setlocal enabledelayedexpansion
- for %%s in ("$$$.txt" "###.txt") do (
- echo,%%s|find "#" 2>nul >nul
- if !errorlevel! neq 0 (echo,"errorlevel /= 0") else (echo,"errorlevel = 0")
- )
- pause&exit/b
复制代码 五。关于 errorlevel 的不等式判断用法,存在一个捷径,即直接采用 || 和 && 逻辑运算符, 如- @echo off &for %%s in ("$$$.txt" "###.txt") do (
- echo,%%s|find "#" 2>nul >nul||(echo,"errorlevel 》失败")&&(echo,"errorlevel 》成功")
- )
- pause&exit/b
复制代码
|