Batch file 使用变量调用变量

Batch file 使用变量调用变量,batch-file,cmd,syntax-error,Batch File,Cmd,Syntax Error,假设我设置了几个变量 set x=1 set y=1 set x1y2=J set x%x%y%y%=Y 在我使用cmd创建的游戏中,变量x%x%y%y%的名称经常变化,因为x和y总是在变化,x%x%y%y%取决于x和y 现在我想使用if语句检查x2y2的值 if %x%x%y%y%%=J echo Yay 开头和结尾的两个百分号用于调用变量,但里面的百分号也用于调用变量 用这个来帮助形象化它(我知道,它令人困惑) 但很明显,语法是正确的,因为没有名为“1x1y”的变量,而且还有一个额外的%

假设我设置了几个变量

set x=1
set y=1
set x1y2=J
set x%x%y%y%=Y
在我使用cmd创建的游戏中,变量
x%x%y%y%
的名称经常变化,因为
x
y
总是在变化,
x%x%y%y%
取决于
x
y

现在我想使用if语句检查
x2y2
的值

if %x%x%y%y%%=J echo Yay
开头和结尾的两个百分号用于调用变量,但里面的百分号也用于调用变量

用这个来帮助形象化它(我知道,它令人困惑)

但很明显,语法是正确的,因为没有名为“1x1y”的变量,而且还有一个额外的
%
。记住,我不能只键入变量名,因为有些变量总是在变化。我该怎么办

如果你感到困惑,请提出问题,如果它缺少任何东西,也可以在评论中发表


提前感谢。

尝试延迟扩展:

@echo off
set x=1
set y=1
set x1y2=J
set x%x%y%y%=Y

setlocal enableDelayedExpansion

if "!x%x%y%y%!" equ "Y" echo yep
作为所示的替代方法,您可以使用
调用
,同时将“外部”变量的
%
符号加倍;您需要一个临时变量(
cmp
),然后:


发生了什么,它是如何工作的?
嗯,
call
引入了命令解释器的另一个解析阶段,所以…:

call set "cmp=%%x%x%y%y%%%"
…在第一个解析阶段之后,变为…:

call set "cmp=%x1y1%"
…因为两个连续的
%%
变成了一个单独的文本
%%
<代码>%x%和
%y%
也在该阶段展开;最后,在第二个解析阶段之后,“outer”变量将展开,因此,命令行将变为:

set "cmp=Y"

请注意,如果“外部”变量包含
和/或其他特殊字符,则此方法可能会失败,其中使用延迟扩展的方法对所有字符都具有鲁棒性



顺便说一下,我建议一般使用语法
set“VAR=Value”“
而不是
设置VR=Value
,这样可以安全地防止有毒字符,并且在变量值中不包含潜在的尾随空格。

几乎可以完美地工作。。。如果
x1y2
的值等于
=
@Oditi,只要两个比较的值在双引号中,这将适用于所有值。我建议您阅读
call set "cmp=%x1y1%"
set "cmp=Y"