变量共享?批量CMD

时间:2016-12-20 09:12:46

标签: batch-file cmd sharing

我试图在3个类别中设置2个变量,总共6个变量,将类别复制三次似乎是一个不好的选择,特别是因为我的真实代码比这大得多,几乎有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

1 个答案:

答案 0 :(得分:1)

我玩了一下,你遇到的问题是,在批处理文件中,转义%的方法是另一种方法。因此,您的代码最终看起来像echo %const%_varA%,而%var_A%为空/不存在,您唯一应该得到的是%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!,将!)改为

随意提问:)