以下Windows批处理文件名为" foo.bat"回声"退出"并按我的预期将返回码设置为1:
if "1"=="1" (
if "1"=="1" (
echo quitting
exit /B 1
)
)
但是,令我惊讶的是,这个批处理文件的返回码是0:
if "1"=="1" (
if "1"=="1" (
echo quitting
exit /B 1
)
echo anything
)
我在Windows命令提示符中确定批处理文件的返回代码:
> cmd.exe /c foo.bat
quitting
> echo %ERRORLEVEL%
0
我已经验证我的环境中尚未设置ERRORLEVEL,运行set ERRORLEVEL
打印"未定义环境变量ERRORLEVEL"如预期的那样。
关于第二个文件的其他所有内容都按预期工作。它 回声"退出"和没有回应"任何"。似乎将echo anything
行添加到脚本意味着行exit /B 1
仍然退出但未设置返回代码。
这是EC2中的Windows 7。 ver
报告" Microsoft Windows [版本6.1.7601]"。
有没有办法确保exit /B 1
真正设置返回代码,即使在复杂的if语句中也是如此?
答案 0 :(得分:1)
如果我将文件扩展名从“.bat”更改为“.cmd”,那么它的行为与预期一致。
答案 1 :(得分:0)
您的测试环境是什么? 你是否真的没有其他副作用?
此批次在Win7Ult和Win10pro中得到了预期的结果
reduce
var arr = [{
"listingId": "p106a904a-b8c6-4d2d-a364-0d21e3505010",
"section": "section1",
"category": "VIP PASS ",
"type": "paper",
"availableTickets": 1
}, {
"listingId": "p106904a-b8c6-4d2d-a364-0d21e3505010",
"section": "section1",
"category": "VIP PASS ",
"type": "paper",
"availableTickets": 2
}, {
"listingId": "pc8f54389-4e58-482a-9535-6917c2948764",
"section": "1",
"category": "WIP",
"type": "paper",
"availableTickets": 1
}];
var unique = arr.reduce((map, o) => (map.has(o.category) ? map : map.set(o.category)),new Map());
console.log(Array.from(unique.keys()));
答案 2 :(得分:0)
我也遇到了同样的问题。我用这样的方法解决了它:
if "1"=="1" (
if "1"=="1" (
echo quitting
goto Exit1
)
echo anything
)
goto :Eof
:Exit1
exit /b 1
另一个“已知”缺陷是:
rem t.bat
copy non-existing somewhere
rem
C:\> cmd /c t.bat
The system cannot find the file specified.
C:\> echo %errorlevel%
0
在使用 cmd /c 运行时,在批处理文件末尾显式返回错误级别不起作用,如果之后有注释(或回显或通常不会更改错误级别的内容)。所以需要改用这个:
rem t.bat
copy non-existing somewhere
exit /b %errorlevel%
rem
C:\> cmd /c t.bat
The system cannot find the file specified.
C:\> echo %errorlevel%
1