背景:由于系统需求写个小小的判断语句判断语句是否执行成功,但好像总是执行成功的分支
脚本如下:
@echo off
set logfile=E:\log.txt
tasklist /V /S localhost | findstr Wechat.exe
if errorlevel 0 goto a
if errorlevel 1 goto b
:a
echo 123>%logfile%
exit
:b
echo 234>%logfile%
exit

检查日志发现总是写的123,这是为什么呢?
使用 if errorlevel 的时候,应该把数字高的放在前面,因为此处的 if errorlevel 0 是在命令返回值大于 0 的时候成立的,相当于 if %errorlevel% geq 0,而当匹配失败时 errorlevel 等于 1,当然符合大于 0 的条件了。
解决办法:
1、调转顺序,先执行 errorlevel 值高的 if 命令
2、使用 if %errorlevel%==0 这里的 %errorlevel% 将被预处理成固定值,与数字 0 进行数值比较,也就不存在返回值大于 0 时产生的问题了