【问题标题】:windows batch script for loop variable expansion not working用于循环变量扩展的 Windows 批处理脚本不起作用
【发布时间】:2016-07-31 06:07:09
【问题描述】:

我正在关注有关 Windows 脚本数组和 for 循环的本教程。这些示例不起作用,在 Windows 7 和 10 上都经过测试。

Batch script tutorial

当我运行以下 for 循环时:

:: @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  ) )

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

1
2
3
4

有什么想法吗?

【问题讨论】:

  • 您的变量名为list<space>。将%list% 更改为%list %
  • 更好:去掉= 周围的空格。它们分别成为变量名称的一部分。
  • 谢谢,我知道这一定很简单。在教程示例中也是错误的。
  • 是的。请查看文档站点上的批处理页面。

标签: windows variables batch-file for-loop


【解决方案1】:

有关使用 SET 等基本批处理命令的信息,请参阅SS64 重要信息源。在您的情况下,如上所述,扩展变量名称 %list % 必须包含空格(如果存在于其定义中)。如果变量定义中不需要该空间,只需在 SET 语句中将其删除。

数组变量 values 列表之间的空格不代表任何问题,并且在许多示例应用程序中非常方便,特别是 FOR 循环,因为它们允许使用标记来查找正确的值。这个例子有效:

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

要学习在批处理脚本中使用数组,请阅读 Aacini 的答案:

一些专家对批量使用“数组”术语进行了辩论。例如,请参阅 dbenhamDIR output into BAT array?

中的回答

【讨论】:

  • 您在代码中修复了问题,但没有解释问题是什么,或者您是如何解决的。你的其余答案掩盖了这个问题。
  • 谢谢。增加了口头解释,尽管从脚本中很明显,这在许多情况下是“通过示例”进行的最佳和充分的解释。抱歉,如果我错过了您对 Array 主题的任何贡献,请在此处或答案中添加相关链接。 :)
  • @Pohl7534 如果脚本适合您,请考虑通过单击答案左侧的“向上箭头”和“选择”标志来投票并接受此线程中的任何答案。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多