尝试理解如何处理变量周围的多个百分比符号

尝试理解如何处理变量周围的多个百分比符号
@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

一些语法说明:

相关内容