【问题标题】:powershell $lastexitcode does not work when running batch filespowershell $lastexitcode 在运行批处理文件时不起作用
【发布时间】:2015-11-20 11:14:53
【问题描述】:

我尝试将退出代码/错误级别代码从 bat 文件中获取到调用 bat 文件的 powershell 脚本中。

虽然 %ErrorLevel% 是 1:

BAT 文件

call aCONFIGURATION
for %%f in (.\createData\*.g.sql) do sqlcmd -b -U %UserName% -P %Password% -S %sqlClonedServer% -d %sqlClonedDatabaseName%  -i %%f -r1 1> NUL
echo %ERRORLEVEL%

当我在 powershellscript 中做时

$lastexitcode 始终为 0,但 %ErrorLevel% 显示为 1

$build = "c:\my.bat"
$state = & $build
Write-Host $LASTEXITCODE

我对这个满是虫子的垃圾电源壳感到毛骨悚然。

我已阅读这些链接,但它们没有帮助,因为结果不同:

如何修复 $lastexitcode

【问题讨论】:

  • 你是不是又多或少地再次问了同样的问题......如果你不同意你已经做了你需要做的事情的密切原因。您可以编辑问题以解释为什么它不是重复的。
  • 旧问题被删除不是因为它是重复的,而是因为它不再需要了。新问题在我可以提供的信息中更进一步。

标签: powershell batch-file


【解决方案1】:

echo %ERRORLEVEL%只是将错误码写入stdout,之后批处理文件正常退出。

如果您希望批处理脚本在退出时真正返回错误,请使用exit /b [exitcode]

call aCONFIGURATION
for %%f in (.\createData\*.g.sql) do sqlcmd -b -U %UserName% -P %Password% -S %sqlClonedServer% -d %sqlClonedDatabaseName%  -i %%f -r1 1> NUL
exit /b %ERRORLEVEL%

【讨论】:

  • 你是我的英雄!当脚本以任何方式失败时,这给了我 0 和 1 或 -1040304 。谢谢马蒂亚斯。
  • 虽然我有多个 for sqlcmd 调用,但可以使用 exit /b %ERRORLEVEL% ONE 一次吗?
  • 好吧,%ERRORLEVEL% 将只包含 last 调用的退出代码(很像 $LASTEXITCODE)。是否“可以”100% 取决于您的用例和要求:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2023-03-14
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多