我用这样的代码尝试了很多东西。
@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?
答案 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是使用的标准符号在许多其他编程语言中,保留它很方便。