@echo off
set var1=hello
set var2=var1
set var3=var2
echo on
echo 2. %%var3%%
echo.
echo 3. %%%var3%%%
我已经echo on
尝试更好地理解批处理,尽管它在解析信息方面似乎确实受到限制。
当回显变量时,是否首先处理内部/中心部分?
我试图了解围绕变量时如何准确解析多个百分号。
我知道每个其他百分号都会抵消前一个百分号,但肯定还有更多原因,因为我似乎永远无法得到我认为应该得到的结果。
当我使用双百分比 %% 进行简单回显时,逻辑似乎成立,如下所示:
echo %%var3%%
Result: %var3%
外层的百分号被取消,只输出单个百分号:%var3%
因此,当我使用 3 %%% 时,我认为它会返回%%var3%%
,因为只有 3 %%% 的中间百分比应该被取消,但结果是:%var2%
所以,显然我不完全理解如何处理围绕变量的多个百分比。
当使用 2 %% 时,第二个 % 是否会取消从 读取值的整个过程var3
?因为结果怎么会%var3%
不是 呢%var2%
?
并且因为使用 3 %%% 时有额外的 %,它重新允许从 读取值的过程var3
,现在可以从 中提取值var3
,即var2
,然后只需在其周围应用剩余的单个 %s 即可得到最终结果:%var2%
我是否已经接近目标了,还是仍在苦苦挣扎?如有任何澄清或建议,我将不胜感激。
答案1
因此,使用这个批处理脚本作为示例,我们可以清楚地看到发生了什么:
set var1=hello world
echo %var1% %%var1%% %%%var1%%%
PAUSE
CMD 在将变量发送到时对其进行处理echo
,因此运行时输出如下所示:
C:\test>set var1=hello world
C:\test>echo hello world %var1% %hello world%
hello world %var1% %hello world%
- 单身的百分号
%var1%
表示变量名,因此它们会扩展 - 双倍的百分号
%%var1%%
表示使用文字% 符号,因此您会得到一个文字%var1%
作为结果(echo
不会重新扩展变量)。 - 三个百分号的处理方式类似于上面的组合:
[%%]%var1%[%%]
,或者扩展后:"%" + "hello world" + "%"
。
三倍百分比没有任何特殊含义。
请注意,set
只需将 之后的所有内容=
作为字符串即可。var2=var1
将保存文字单词“var1”,而var2=%var1%
导致 cmd 扩展var1
。
一些语法说明: