说我设置了一些变量......
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%
依赖{ {1}}和x
。
现在我想使用if语句来检查y
的值。
x2y2
开头和结尾的两个百分号是调用变量,但里面的百分号也是调用变量。
使用它来帮助可视化它(我知道,它令人困惑)
if %x%x%y%y%%=J echo Yay
但显然语法是正确的,因为没有名为' 1x1y' 和还有一个额外的 This is all one big variable
______________|______________
| |
% x % x % y % y % %
| |___| | |___|
A letter | A letter |
These two are smaller variabels set previously
。请记住,我不能只输入变量名称,因为一些变量总是在变化。我该怎么做..?
如果您感到困惑,请提出问题,如果没有问题,请随时在评论中发帖。
提前致谢。
答案 0 :(得分:2)
尝试延迟扩展:
@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
答案 1 :(得分:1)
作为delayed expansion所示的this answer的替代方案,您可以使用call
,同时将&{34;外部"}的%
符号加倍。变量;你需要一个临时变量(cmp
)然后:
set "x=1"
set "y=1"
set "x1y2=J"
set "x%x%y%y%=Y"
call set "cmp=%%x%x%y%y%%%"
if "%cmp%"=="J" echo Yay
会发生什么,它是如何运作的?
好吧,call
引入了命令解释器的另一个解析阶段,所以......:
call set "cmp=%%x%x%y%y%%%"
...,在第一个解析阶段之后,变为......:
call set "cmp=%x1y1%"
...,因为两个连续%%
成为单个文字%
;在此阶段,%x%
和%y%
也会得到扩展;最后,在第二个解析阶段之后,"外部"变量变得扩大,因此,命令行变为:
set "cmp=Y"
请注意,如果"外部"变量包含"
和/或其他特殊字符,其中使用延迟扩展的方法对所有字符都是健壮的。
顺便说一下,我建议通常使用语法set "VAR=Value"
而不是set VR=Value
,以便安全地防止有毒字符,并且不包括变量值中潜在的尾随空格。