2016-07-31 152 views
1

我正在关注本教程中关于windows脚本数组和for循环。这些例子不工作,在Windows 7和10windows批处理脚本循环变量扩展不起作用

Batch script tutorial

当我运行循环以下测试:

:: @echo off 
set list = 1 2 3 4 
(for %%a in (%list%) do ( 
    echo %%a 
)) 

我得到以下输出:

set list = 1 2 3 4 
(for %a in ((null)) do (echo %a )) 

列表varialble的内容不会打印在for循环中。我期待得到

1 
2 
3 
4 

任何想法?

+0

您的变量被命名为'list '。将'%list%'更改为'%list%' – 2016-07-31 06:35:07

+4

甚至更​​好:摆脱'='周围的空格。它们分别成为可变名称的一部分。 – Stephan

+0

谢谢,我知道它一定很简单。这在教程示例中也是错误的。 – Pohl7534

回答

2

有关使用基本批处理命令(如SET)的信息,请参阅SS64伟大的信息源。就你的情况而言,正如上面所评论的那样,扩展变量名%list%必须包含空格(如果存在于其定义中)。如果变量定义中不需要该空间,只需在SET语句中删除它即可。

数组变量之间的空格值列表不代表任何问题,并且在许多示例应用程序中可以非常方便,特别是FOR循环,因为它们允许令牌用于查找正确的值。这个例子的工作原理:

@echo off 
set "list= 1 2 3 4" 
for %%a in (%list%) do ( 
    echo %%a 
) 

供学习使用批处理脚本阵列,读Aacini的答案:

使用“阵列”之三一些专家对这些批评意见进行了辩论。例如dbenham的回答在DIR output into BAT array?

+0

您解决了代码中的问题,但未解释问题所在,也未解决问题。你的答案的其余部分掩盖了这个问题。 – dbenham

+0

谢谢。增加了口头解释,尽管从脚本中可以看出,在很多情况下,这是“以身作则”的最好和充分的解释。对不起,如果我错过了您对Array主题的任何贡献,请在此处或在答案中添加相关链接。 :) – sambul35

+0

@ Pohl7534如果脚本适用于您,请考虑通过单击答案左侧的“向上箭头”和“选择”符号来选择并接受本主题中的任何答案。 :) – sambul35