gpt4 book ai didi

windows - 有没有一种简单的方法可以从嵌套的批处理脚本中捕获错误代码 (%errorlevel%)?

转载 作者:可可西里 更新时间:2023-11-01 11:27:43 24 4
gpt4 key购买 nike

我有一个嵌套的批处理脚本,我希望它的错误代码渗透到调用它的主批处理脚本。我试过了

exit /b %errorlevel%

但是变量没有返回。调用的批处理脚本中的 ECHO'ing %errorlevel% 给我 103,但主批处理脚本中的 ECHO'ing %errorlevel%(执行方面的下一行)给我 0。这个问题之前已经在 SO 上问过,但没有一个帖子对我有用。

编辑:由于写得不好,我修改了我的问题,并添加了代码供您查看。

这是主要的批处理文件。除非我将条件更改为 0 以外的其他内容,否则这里的 if 语句永远不会被命中:

call BuildInstaller.cmd %SourceDir% %TargetDir% %ProductVersion% %%I
if %errorlevel% neq 0 (
ECHO %date% %time%: Build of %%I failed, halting >> %LOGFILE%
exit /b %errorlevel%
)

这是 BuildInstaller.cmd 退出的地方。我已经清理了打印件以避免混淆:

if %errorlevel% neq 0 (
exit /b %errorlevel%
)

作为旁注,我也尝试过

set returnvalue=12

在被调用的批处理脚本中,但在主批处理脚本中回显 %returnvalue% 始终是后面程序的一次执行。如果有人知道这个子问题的答案,那就太好了。

最佳答案

您遇到了经典的延迟扩展错误。看这个例子:

call BuildInstaller.cmd %SourceDir% %TargetDir% %ProductVersion% %%I
if %errorlevel% neq 0 (
ECHO %date% %time%: Build of %%I failed, halting >> %LOGFILE%
exit /b %errorlevel%
)

这是 BuildInstaller.cmd:

@echo off
setlocal EnableDelayedExpansion

if 1 == 1 (
rem Inside a code block, %errorlevel% have the same value it had before the block
rem (its %value% is NOT updated inside the block) so you need to use !errorlevel!
rem in order to get the *updated* value

verify set errorlevel = 1
if !errorlevel! neq 0 (
exit /b !errorlevel!
)
)

exit /B

有关详细信息,请查找“延迟扩展”。

关于windows - 有没有一种简单的方法可以从嵌套的批处理脚本中捕获错误代码 (%errorlevel%)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30926374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com