你能在批处理文件中创建一个包含变量的变量吗?

时间:2016-06-23 14:23:18

标签: batch-file

到目前为止,我的代码看起来像这样:

:start
set a=0
echo Enter Number:
set /p b%a%=
set /a a=%a%+1
if %a% lss 5 goto start
set x=1
:show
echo Number 1: %b%a%%
if %x% lss 5 goto show  

这可能吗?它就像一个数组,但从技术上讲它不是。

1 个答案:

答案 0 :(得分:2)

是的,这可以通过下面的批处理代码进行演示。

@echo off
setlocal EnableDelayedExpansion
set "a=1"
:LoopEnterNumbers
set /P "b%a%=Enter Number: "
set /A a+=1
if %a% lss 6 goto LoopEnterNumbers
set "a=1"
:LoopDisplayNumbers
echo Number %a%: !b%a%!
set /A a+=1
if %a% lss 6 goto LoopDisplayNumbers
endlocal

start是Windows标准命令。可以但不建议将其用作标签。

可以在命令set /P上指定提示文本 有关详细信息,请参阅How to set environment variables with spaces?

set /A之后的所有内容都被解释为算术表达式,并且也支持+=

需要使用延迟环境变量扩展来引用环境变量的值以及名称中的另一个环境变量。

BTW:命令set b以字符name=value开头输出格式为b的所有环境变量。使用更独特的名称,这通常是比上面使用的循环更好的输出变量的方法。

@echo off
setlocal EnableDelayedExpansion
set a=1
:LoopEnterNumbers
set /P "MyNumber#%a%=Enter Number: "
set /A a+=1
if %a% lss 6 goto LoopEnterNumbers
for /F "tokens=2,3 delims=#=" %%I in ('set MyNumber#') do echo Number %%I%: %%J
endlocal

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?