如何在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" 中的每个条目调用一次命令,则不需要首先创建分隔符分隔的列表,而只需直接使用条目。
我正在尝试 运行 在批处理文件中执行此命令:
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" 中的每个条目调用一次命令,则不需要首先创建分隔符分隔的列表,而只需直接使用条目。