【发布时间】:2020-09-23 19:30:52
【问题描述】:
我使用的是 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 命令中的变量是不同类型的变量。那是对的吗?如果是这样,是否有一个链接可以清楚简洁地解释差异?
第二季度。我注意到循环索引变量是 %%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 ?
【问题讨论】:
-
在
for命令的帮助信息顶部附近,(在命令提示符处使用for /?或help for),您应该清楚地看到像这样To use the FOR command in a batch program, specify %%variable instead of %variable. -
IBM 的一位女工程师做出了这些决定。原因是为了运行 MSDos 批处理文件。
-
for只接受一个字母的参数。这就是工作原理。 -
这对 MSDos 用户来说并非不直观。 39 年的语法几乎相同。
标签: loops batch-file variables cmd