变量共享?批量命令
variable sharing? Batch CMD
我正在尝试在 3 个类别中设置 2 个变量,总共 6 个变量,将类别复制 3 次似乎是一个糟糕的选择,尤其是因为我的实际代码比这大得多,几乎有 10 个类别,每个类别有 30 个变量.
首先我问要设置哪个类别的变量(常量),然后要求设置该类别中的两个变量。
很好,直到我想对组合变量做些什么。
@echo off
cls
:start
cls
echo which variable do you want to set?
echo (1),(2),(3)
choice /c 123 /n
if ERRORLEVEL 3 goto :3
if ERRORLEVEL 2 goto :2
if ERRORLEVEL 1 goto :1
:1
set const=one
goto :wizard
:2
set const=two
goto :wizard
:3
set const=three
goto :wizard
:wizard
set /p %const%_varA= set %const% variableA:
set /p %const%_varB= set %const% variableB:
:: this line is the problem
echo %%const%_varA%
echo %%const%_varB%
::
echo.
pause
goto :filewrite
echo.
:filewrite
echo one varA %one_varA%
echo one varB %one_varB%
echo two varA %two_varA%
echo two varB %two_varB%
echo three varA %three_varA%
echo three varB %three_varB%
pause
goto :start
我试了一下,你遇到的问题是在批处理文件中转义 %
的方法是另一种方法。所以你的代码最终看起来像 echo %const%_varA%
并且 %var_A%
是 empty/does 不存在,你唯一应该得到的是 %const
作为输出。
幸运的是,有一种方法可以让另一个角色进入游戏来防止这种情况发生。在第一行下添加 setlocal EnableDelayedExpansion
将使变量可以使用感叹号访问。这通常用于访问封闭括号中的变量,但对于这个非常有用:
@echo off
setlocal EnableDelayedExpansion
set const=three
set %const%_varA=foo
echo Without exclamationmarks: %%const%_varA%
echo With exclamationmarks : !%const%_varA!
pause
是一个说明问题的小例子。
上面一行是您当前拥有但未使用的内容。然而,较低的使用上面解释的延迟扩展。
意思:首先(%
)计算出%const%
的值,换行到echo [...] !three_varA!
和after(!
)来整件事!
欢迎提问:)
我正在尝试在 3 个类别中设置 2 个变量,总共 6 个变量,将类别复制 3 次似乎是一个糟糕的选择,尤其是因为我的实际代码比这大得多,几乎有 10 个类别,每个类别有 30 个变量.
首先我问要设置哪个类别的变量(常量),然后要求设置该类别中的两个变量。
很好,直到我想对组合变量做些什么。
@echo off
cls
:start
cls
echo which variable do you want to set?
echo (1),(2),(3)
choice /c 123 /n
if ERRORLEVEL 3 goto :3
if ERRORLEVEL 2 goto :2
if ERRORLEVEL 1 goto :1
:1
set const=one
goto :wizard
:2
set const=two
goto :wizard
:3
set const=three
goto :wizard
:wizard
set /p %const%_varA= set %const% variableA:
set /p %const%_varB= set %const% variableB:
:: this line is the problem
echo %%const%_varA%
echo %%const%_varB%
::
echo.
pause
goto :filewrite
echo.
:filewrite
echo one varA %one_varA%
echo one varB %one_varB%
echo two varA %two_varA%
echo two varB %two_varB%
echo three varA %three_varA%
echo three varB %three_varB%
pause
goto :start
我试了一下,你遇到的问题是在批处理文件中转义 %
的方法是另一种方法。所以你的代码最终看起来像 echo %const%_varA%
并且 %var_A%
是 empty/does 不存在,你唯一应该得到的是 %const
作为输出。
幸运的是,有一种方法可以让另一个角色进入游戏来防止这种情况发生。在第一行下添加 setlocal EnableDelayedExpansion
将使变量可以使用感叹号访问。这通常用于访问封闭括号中的变量,但对于这个非常有用:
@echo off
setlocal EnableDelayedExpansion
set const=three
set %const%_varA=foo
echo Without exclamationmarks: %%const%_varA%
echo With exclamationmarks : !%const%_varA!
pause
是一个说明问题的小例子。
上面一行是您当前拥有但未使用的内容。然而,较低的使用上面解释的延迟扩展。
意思:首先(%
)计算出%const%
的值,换行到echo [...] !three_varA!
和after(!
)来整件事!
欢迎提问:)