gpt4 book ai didi

batch-file - EnableDelayedExpansion 并仍然设置全局环境变量

转载 作者:行者123 更新时间:2023-12-02 06:35:42 27 4
gpt4 key购买 nike

setlocal
for /F "tokens=1,2" %%a in (%env_cells%) do (
call :env_setter env_setter_%%a
)
goto:EOF

:env_setter
rem doesn't do anything
endlocal
call %%1
goto:eof

问题是上面禁用了由 :env_call 产生的所有调用中的全局变量设置。有没有办法解决这个问题?

也许这是一个更详细的解释:

env_setter 是对批处理文件的调用,该批处理文件本身包含 set 调用,目的是在此调用上下文上设置环境变量。因为在调用 !env_cell 期间启用了 setlocal!并且 :env_cell 中的 endlocal 似乎没有禁用 endlocal,表示 set 调用不会按预期更改此上下文。

在这个特定的示例中,可以使用 %%a,但我希望总体上了解此功能。

是否有手动方法可以在 if/for block 中反射性地访问变量值?

最佳答案

把你的变量扔到墙上!

@echo off &setlocal
echo(

echo this obviously doesn't work
set "Counter="
for /l %%a in (1 1 5) do (
SETLOCAL ENABLEDELAYEDEXPANSION
set "Counter=!Counter!1"
set "Variable=!Variable!!Counter!"
echo !Counter!:!Variable!
endlocal
)
echo Counter's value in the calling environment : %Counter%
echo Variable's value in the calling environment: %Variable%
echo(

echo throw your variables over the wall!
set "Counter="
for /l %%a in (1 1 5) do (
SETLOCAL ENABLEDELAYEDEXPANSION
set "Counter=!Counter!1"
set "Variable=!Variable!!Counter!"
echo !Counter!:!Variable!
for /f %%a in ('set Counter^&set Variable') do (if "!"=="" endlocal)&set "%%a"
)
echo Counter's value in the calling environment : %Counter%
echo Variable's value in the calling environment: %Variable%

关于batch-file - EnableDelayedExpansion 并仍然设置全局环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019154/

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