powershell - 从 PowerShell 运行批处理文件时出现意外的退出代码
问题描述
我在 Microsoft Windows 环境中调用一个.bat
文件Powershell
,并且想知道退出代码是成功还是失败。
在这种不寻常的(尽管不是很不寻常)边缘情况下似乎出现了问题。
示例 #1:
.\test1.bat
ECHO ON
setlocal enabledelayedexpansion
False
if !errorlevel! neq 0 exit /b !errorlevel!
echo "More text"
这工作正常。False
导致错误;下一行检查状态,看到 a1
和exit
s 和 code 1
。调用powershell
有正确的结果。echo $LASTEXITCODE
是 1
。
示例 #2:
.\test2.bat
ECHO ON
setlocal enabledelayedexpansion
if "testing" == "testing" (
False
if !errorlevel! neq 0 exit /b !errorlevel!
echo "More text"
echo "More code"
True
if !errorlevel! neq 0 exit /b !errorlevel!
echo "More code"
)
这就是困难所在。False
导致错误;下一行检查状态,看到 a 1
,并以 code 退出1
。然后,调用powershell
有一个意想不到的结果,echo $LASTEXITCODE
是0
。
只能修改批处理文件来解决问题吗?
解决方案
当从外部(例如 PowerShell)调用批处理文件时,您会看到有问题的cmd.exe
行为,它们的退出代码不能可靠地作为进程退出代码中继。 cmd.exe
cmd.exe
有关背景信息,请参阅此答案。
解决方法:
推荐阅读
- mysql - 我们如何分别展示不同类型的产品?
- scrapy - 使用scrapyd.schedule时如何将带有scrapyd的数字/字符串列表发送给蜘蛛
- node.js - nodejs不和谐从用户ID获取昵称
- python - Python Dictionary 实现相关的语法问题
- ffmpeg - 如何对 m3u8 文件执行 mediainfo
- javascript - 导入 git npm 模块导致未定义
- ansible - 作业模板 AWX
- java - 在 Java 中避免 Elasticsearch 重新索引超时
- javascript - PayPal 的 JavaScript API 强制“送货地址与账单地址相同”?
- python - 如何在 python 上制作短信网络服务以将短信发送到每个地方?