Batch file 在setlocal环境中设置全局环境变量

Batch file 在setlocal环境中设置全局环境变量,batch-file,Batch File,我想知道这里是否有人能帮我。。。我的bat文件有以下问题: script.bat: SetLocal EnableDelayedExpansion set variable=false call :continue script2.bat echo variable in script: %variable% exit B /0 :continue set batScript=%1 call %batScript% call :error_but_continue echo variable

我想知道这里是否有人能帮我。。。我的bat文件有以下问题:

script.bat:

SetLocal EnableDelayedExpansion
set variable=false
call :continue script2.bat
echo variable in script: %variable%
exit B /0

:continue
set batScript=%1
call %batScript%
call :error_but_continue
echo variable in continue: %variable%
exit /B 0

:error_but_continue
EndLocal & set variable=true
echo variable in error_but_continue: %variable%
exit /B 1
我知道这个脚本现在看起来有点奇怪,那只是因为它只是整个大图像的一小部分

我现在的输出如下:

variable in error_but_continue: true
variable in continue: true
variable in script: false
为什么脚本本身的值现在没有设置为“true”?如何在不删除脚本开头的整体“Setlocal”的情况下进行更改


非常感谢

为什么您要使用
EnableDelayedExpansion
,然后使用
EndLocal
再次有效地禁用它?您可能需要对您的任务和两个脚本内容进行一些扩展,以便我们就最合适的修复方法提供建议。好的,主要想法如下:我有一个脚本一个接一个地调用多个小脚本-如果其中一个小脚本失败,我想向另一个“父”脚本发送信号(不是错误级别,这是单独处理的)。每个脚本表示升级的一个阶段-如果某个阶段遇到错误,我希望在“出错时继续”或“出错时取消”之间有所不同。因此,即使所有阶段都已完成,且中间的一个阶段出现错误,我也希望执行“一个阶段失败”在一个变量中返回到父脚本。我知道,这听起来很复杂…您尝试在
中使用
endlocal
:error\u但继续
,但这不起作用,因为
endlocal
必须与
SETLOCAL
处于相同的
调用
级别。除此之外,还有
script2的解决方案.bat
?每个
setlocal
本地化都会被
exit/B
goto:EOF
或到达脚本末尾隐式终止,这导致了一个好的事实,即此类本地化总是被限制在它们所使用的
调用
级别,因此只需要显式
endlocal
来终止i与此相反,
pushd
/
popd
不关心任何
调用
级别,当批处理脚本完成执行时,任何存储目录仍然可用…为什么使用
EnableDelayedExpansion
然后似乎使用
EndLocal
来有效禁用它增益?您可能需要对您的任务和两个脚本内容进行一些扩展,以便我们就最合适的修复提供建议。好吧,主要想法如下:我有一个脚本一个接一个地调用多个小脚本-如果其中一个小脚本失败,我想向另一个“父”脚本发送信号(不是错误级别,这是单独处理的)。每个脚本表示升级的一个阶段-如果某个阶段遇到错误,我希望在“出错时继续”或“出错时取消”之间有所不同。因此,即使所有阶段都已完成,且中间的一个阶段出现错误,我也希望执行“一个阶段失败”在一个变量中返回到父脚本。我知道,这听起来很复杂…您尝试在
中使用
endlocal
:error\u但继续
,但这不起作用,因为
endlocal
必须与
SETLOCAL
处于相同的
调用
级别。除此之外,还有
script2的解决方案.bat
?每个
setlocal
本地化都会被
exit/B
goto:EOF
或到达脚本末尾隐式终止,这导致了一个好的事实,即此类本地化总是被限制在它们所使用的
调用
级别,因此只需要显式
endlocal
来终止i与此相反,
pushd
/
popd
不关心任何
调用
级别,当批处理脚本完成执行时,任何存储目录仍然可用。。。