【问题标题】:Can you create a variable that has a variable in it in batch files?您可以在批处理文件中创建一个包含变量的变量吗?
【发布时间】:2016-06-23 14:23:18
【问题描述】:

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

: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  

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

【问题讨论】:

  • 也许有一些丑陋的 hack:您可以在运行时使用 echo 生成批处理文件,然后将包含实际的 set /p 语句。
  • 不确定您要达到的目标,我想您可能对这篇文章感兴趣:Batch: Parse TXT Lines into Array...

标签: batch-file


【解决方案1】:

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

@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 之后的所有内容都被解释为算术表达式,并且还支持 +=

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

顺便说一句:命令set bname=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 /?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多