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
Run Code Online (Sandbox Code Playgroud)
问题是上述方法禁用了:env_call产生的所有调用中的全局变量设置。有办法解决吗?
也许这是更详细的解释:
env_setter是对批处理文件的调用,该批处理文件本身包含set旨在在此调用上下文上设置环境变量的调用。因为setlocal在调用!env_cell!期间启用。并且:env_cell中的endlocal似乎没有禁用endlocal,上述set调用不会按预期更改此上下文。
在此特定示例中,可以使用%% a,但我希望大致了解这一功能。
是否有手动方式在if / for块中以反射方式访问变量值?
@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%
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2040 次 |
| 最近记录: |