Batch file 能否在批处理文件中创建一个包含变量的变量?

Batch file 能否在批处理文件中创建一个包含变量的变量?,batch-file,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 这可能吗?它就像一个数组,但从技术上讲它不是。是的,正如下面的批处理代码所示,这是可能的 @echo off setlocal EnableDelayedExpansion

到目前为止,我的代码如下所示:

: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  

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

是的,正如下面的批处理代码所示,这是可能的

@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
上指定提示文本
有关更多详细信息,请参阅

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

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

顺便说一句:命令
setb
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/?
  • 获取/?
  • goto/?
  • 如果/?
  • 设置/?
  • setlocal/?

也许有一些难看的技巧:你可以在运行时用echo生成批处理文件,然后生成包含实际set/p语句的批处理文件。不确定你想实现什么,我想你可能会对这篇文章感兴趣:。。。