如何从Shell任务检测Windows程序的errorlevel返回值?
关于检测Windows可执行文件返回值的解决方案
VS Code的shell任务本身默认就会检测命令的退出码(对应Windows的errorlevel):只要命令返回0,任务会自动标记为成功;返回非0值则标记为失败,不需要额外配置内置的problemMatcher来实现这个基础检测逻辑。
如果需要更精准地控制失败条件,或是针对特定errorlevel做自定义处理,可以参考以下两种方式:
方式一:自定义problemMatcher捕获指定退出码
虽然没有专门针对errorlevel的内置problemMatcher,但可以自定义一个简单的配置来捕获非0退出码:
{ "label": "Some EXE", "type": "shell", "command": "FOO.exe", "args": [ "bar" ], "problemMatcher": { "owner": "custom", "severity": "error", "background": false, "pattern": { "regexp": "^.*$" }, "exitCode": { "notEquals": 0 // 捕获所有非0的errorlevel作为失败 } } }
如果只需要针对特定非0值标记失败,可将notEquals替换为equals并指定具体值:
"exitCode": { "equals": [1, 3, 5] // 仅当errorlevel为1、3、5时标记任务失败 }
方式二:在命令中显式检查errorlevel
也可以直接用Windows批处理语法在命令里判断errorlevel,同时保留原退出码:
{ "label": "Some EXE", "type": "shell", "command": "FOO.exe bar && echo 执行成功 || (echo 执行失败,errorlevel为%errorlevel% && exit /b %errorlevel%)" }
关键提示
- 若你的可执行文件返回的非0
errorlevel包含警告类场景(而非严格错误),才需要通过自定义problemMatcher来区分处理;常规的成功/失败判断依赖VS Code任务的默认退出码检测即可。
内容的提问来源于stack exchange,提问作者JohnKoz




