8行中的变量(批处理)

时间:2017-05-14 07:27:55

标签: batch-file variables

我用这样的代码尝试了很多东西。

@echo off
set %1%=A
set %2%=B
set %3%=C
set %4%=D
set %5%=E
set %6%=F
set %7%=G
set %8%=H
echo %1%%2%%3%%4%%5%%6%%7%%8%%9%

但有点没有用,输出是这样的:

1%2%3%4%5%6%7%8

如何输出ABCDEFGH?

2 个答案:

答案 0 :(得分:2)

尝试

@echo off
set _1=A
set _2=B
set _3=C
set _4=D
set _5=E
set _6=F
set _7=G
set _8=H
echo %_1%%_2%%_3%%_4%%_5%%_6%%_7%%_8%

从概念开始,您的问题是批处理解析器将%n n范围内的0..9作为批处理文件的命令行参数处理,而不是变量扩张行动。

可以使用数字前缀变量名称,但是您需要启用延迟扩展并将变量扩展语法从%varName%更改为!varName!,以便能够检索值。不使用数字前缀变量名更容易。

第二个问题是语法%varName%仅用于需要检索变量值的位置。设置值时,语法为set varName=varValue,或者更好,您可以将操作引用为set "varName=varValue",以避免出现特殊字符问题并包含不需要的结束空格。

答案 1 :(得分:0)

你的问题不明确。下面的代码完全您要求的内容:

@echo off
set A=A
set B=B
set C=C
set D=D
set E=E
set F=F
set G=G
set H=H
echo %A%%B%%C%%D%%E%%F%%G%%H%

然而,这个显而易见的解决方案很可能不是你想要的......

如果您想知道是否有“自动”定义一系列变量并将其全部处理的方法,那么解决方案是使用数组。您可以在Wikipedia article中阅读数组概念的描述,并在this answer的批处理文件中详细解释数组管理。例如:

@echo off
setlocal EnableDelayedExpansion

rem Create "a" array with all elements given:
set n=0
for %%a in (A B C D E F G H) do (
   set /A n=n+1
   set a[!n!]=%%a
)

rem Show the 8 elements of "a" array
echo %a[1]%%a[2]%%a[3]%%a[4]%%a[5]%%a[6]%%a[7]%%a[8]%

rem Join *all* the elements of "a" array in a single variable
set "all="
for /L %%i in (1,1,%n%) do set "all=!all!!a[%%i]!"

echo %all%

请注意,最后一个示例正常工作无关在“a”数组中定义了多少个元素。

虽然您也可以用更短的方式编写数组元素,省略braquets:set "a1=A" & set "a2=B"等,然后使用echo %a1%%a2%...,您应该记住使用braquets是使用的标准符号在许多其他编程语言中,保留它很方便。