2011-03-25 64 views
2

我試圖編寫一個批處理文件,這將允許用戶選擇他們的活動Internet連接,如果有多個來自netsh命令生成的列表,然後更改DNS設置。創建一個批處理文件來識別活動的Internet連接

但是我不知道如何使用選擇命令時,已知的選項數量,直到腳本執行。沒有使用數組,我試圖創建一個字符串變量'choices'來保存代表數字選擇的字符串,並將它傳遞給選擇命令,但是我不能讓它工作。我不禁感到必須有一個更簡單的方法來做到這一點,但我的研究沒有向我證明這一點。任何幫助將受到感謝。

@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 

回答

2

問題不在於選擇命令,選擇字符串的構建失敗。
有時一個簡單的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 /?

被(部分地)說明
相關問題