如何在windows批处理中传入数组参数?

How to passing in array parameter in windows batch?

我正在尝试 运行 在批处理文件中执行此命令:

wmic nicconfig where macaddress=somemacaddr call SetDNSServerSearchOrder (an array paramter)

例如:

set dnslist[1]="172.12.3.1"
set dnslist[2]="222.123.2.1"
...
set dnslist[x]="135.132.1.2"

在 运行 批处理之前,我们不知道 dnslist 大小。 我们如何将 dnslist 直接传递给 SetDNSServerSearchOrder

批处理文件本身没有数组。你所拥有的只是一组具有相同前缀的环境变量。没什么特别的。

如何将它们传递给命令取决于命令(例如,它们是 space 分隔的,即单独的参数,还是逗号分隔的,或者完全是其他东西?)。您需要从那些与程序期望的格式匹配的变量中创建一个字符串,例如当它们应该 space 分隔时,按以下方式创建一个字符串:

setlocal enabledelayedexpansion
for /f "delims==" %%A in ('set dnslist[') do set List=!List! %%B

wmic nicconfig where macaddress=somemacaddr call SetDNSServerSearchOrder %List%

同样适用于不同的分隔符。理想情况下,延迟扩展应该在脚本的一开始就启用;通常,在中间创建一个新的本地环境是没有用的。

如果您想为 "list" 中的每个条目调用一次命令,则不需要首先创建分隔符分隔的列表,而只需直接使用条目。