创build一个batch file来识别活动的Internet连接

我试图写一个batch file,这将允许用户select他们的活动Internet连接,如果从netsh命令生成的列表中有多个,然后更改DNS设置。

然而,我不知道如何使用select命令时,已知的选项数量,直到脚本执行。 没有使用数组,我试图创build一个stringvariables“select”来容纳代表数字select的string,并将其传递给select命令,但我不能让它工作。 我不禁感到必须有一个更简单的方法来做到这一点,但是我的研究却没有向我certificate这一点。 任何帮助将受到感谢。

@echo off setlocal Set active=0 Set choices=1 set ConnnectedNet= FOR /F "tokens=2,3* " %%j in ('netsh interface show interface ^| find "Connected"') do Set /A active+=1 FOR /L %%G IN (2,1,%active%) do (set choices=%choices%%%G) if %active% lss 2 goto :single if %active% gtr 1 goto :multiple :single FOR /F "tokens=2,3* " %%j in ('netsh interface show interface ^| find "Connected"') do set ConnnectedNet=%%l netsh interface IPv4 set dnsserver "%ConnnectedNet%" static 0.0.0.0 both goto :eof :multiple echo You have more than one active interface. Please select the interface which you are using to connect to the Internet FOR /F "tokens=2,3* " %%j in ('netsh interface show interface ^| find "Connected"') do echo %%l CHOICE /C:%choices% /N /T:1,10 

Solutions Collecting From Web of "创build一个batch file来识别活动的Internet连接"

问题不在于选择命令,选择字符串的构建失败。
有时一个简单的echo on会有所帮助。

 set choices=1 ... FOR /L %%G IN (2,1,%active%) do (set choices=%choices%%%G) 

这是失败的,因为在循环开始之前set choices=%choices%只扩展一次,所以你set choices=1%%G

相反,你可以使用延迟扩展

 setlocal EnableDelayedExpansion FOR /L %%G IN (2,1,%active%) do (set choices=!choices!%%G) 

或双倍/呼叫扩展

 FOR /L %%G IN (2,1,%active%) do (call set choices=%%choices%%%%G) 

延迟扩展(部分)用set /?解释set /?