一行中有 8 个变量(批处理)



我已经用这样的代码尝试了多种东西。

@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?

尝试使用

@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%

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

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

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

你的问题不清楚。下面的代码完全按照您的要求执行:

@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%

但是,这个明显的解决方案很可能不是您想要的......

如果你想知道是否有办法"自动"定义一系列变量并将它们全部处理,那么解决方案是使用数组。您可以在这篇维基百科文章中阅读阵列概念的描述,并在此答案中阅读批处理文件中数组管理的详细说明。例如:

@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"数组中定义了多少个元素,最后一个示例都可以正常工作。

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

最新更新