cmd批处理变量的行为是不直观的

问题描述 投票:-1回答:1

我正在使用Windows 10,通过命令提示符窗口运行批处理文件。

我可以使事情起作用,但我不知道为什么它起作用或为什么我不能做某些事情:

set "file_list=a1 a2"
for %%a in (%file_list%) do (
    echo %%a.py
)

这小段代码有效。我可以在上面建立,但是

Q1:我想将变量%% a更改为%% filename ...,但这不起作用!我想知道是否可以保留文件名,所以我尝试了%% fname。在这种情况下,我得到错误:

%fname was unexpected at this time.

我可以在命令行中进行设置并使用描述性变量名,但是在循环时似乎不起作用。 (我是使用上面的%file_list%变量来完成的!)为什么我只能对循环变量使用单个字符?有什么办法解决吗?

Q1a。这使我认为循环索引变量是与set命令中的变量不同的变量。那是对的吗?如果是这样,是否有一个链接可以清楚简洁地说明差异?

Q2。我注意到循环索引变量是%% a,而不是a或%a或%a%。我永远都不会猜到。我看过的网站就是这么说的。但是我看不到任何原因的解释,除了第一个百分比是逃脱。好的。那真的并不能解释任何事情。它只是意味着“这就是您的操作方式”。使用百分号时出现的错误消息很有趣。

set "file_list=a1 a2"
for %a in (%file_list%) do (
    echo %a.py
)

"file_list) was unexpected at this time."

所以我可以隐约看到有些东西无法正确逃脱。为什么%a中的%需要转义,所以变成%% a了?

loops batch-file variables cmd
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.