针对这个问题:
我设法编写了批处理脚本,该脚本将通过解析文本文件来加载变量值和数组变量值。
现在,我想在一个函数或另一个批处理脚本中执行此操作,该脚本将由主脚本调用。例如:
:: this is the main Windows Batch Script
call LoadConfigValues.bat
:: display the loaded vales
set
我注意到,由于被调用的脚本
LoadConfigValues.bat
有语句SETLOCAL ENABLEDELAYEDEXPANSION
,那么该脚本生成的所有变量都将被删除。
我如何强制脚本创建的新变量
LoadConfigValues.bat
将可用于主脚本?
解决方案1:(黑暗者的建议)
setlocal enabledelayedexpansion
call subroutine
rem your variables available here
在子程序中:
if "" neq "!!" setlocal enabledelayedexpansion
这样,子例程中的
setlocal
仅在尚未生效时才被调用(但是 - 更改/创建的变量将由子例程脚本末尾的隐式 endlocal
取消)。
解决方案2:
call subroutine "filename"
for /f "usebackqdelims=" %%e in ("filename") do set "%%e"
del "filename"
在子程序中:
if "%~1" neq "" for %%e in (%keynameslist%) do set %%e>>"%~1"
将以
keynameslist
中的条目开头的变量名称写入文件 %1
,如果指定了 var=value
,则其值采用格式 %1
。
[均未经测试]