2014-09-03 37 views
0

我試圖做一個批處理文件,如果他們是別的東西,我的DNS設置將設置爲本地主機,如果他們是本地主機,則會自動執行。我到目前爲止所做的是:如何製作一個DNS「開關」批處理文件

set var=1 

if "%var%" == "1" 
(
netsh interface ipv4 add dnsserver "Wi-Fi" address=127.0.0.1 index=1 
set var=2 
) 

if "%var%" == "2" 
(
netsh interface ip set dns 「Wi-Fi」 dhcp 
set var=1 
) 

pause 

顯然,這些變量不是永久性的,也不會「保存」。這是問題編號1.但是,這個腳本甚至不會將其更改爲本地主機地址。另外,如果確實有效,那麼腳本就會明顯受到挫折,無法檢測到DNS設置是否被其他方式改變了。我被困住了,因爲我的google-fu不能解決我在做錯什麼的挑戰。

回答

1

if命令左括號必須在同一行的if命令

號,環境變量沒有「保存」。每個進程都有其自己的環境變量副本,並且從一個進程所做的更改不可見於其他進程。變量中的值保持與設置它的過程一樣長,或者直到過程刪除它的值。要保存變量,需要明確地將其保存到註冊表(請參閱setx /?)或文件(稍後您必須閱讀)。

而且,您的代碼有邏輯錯誤。在批處理文件,代碼從一行執行到下一除非發生改變,所以

if %var%==1 (
    change to state 1 
    set var=2 
) 
if %var%==2 (
    change to state 2 
    set var=1 
) 

有什麼阻礙執行離開第一,如果進入第二個。當該代碼執行時,它會改變到狀態2。

它應該是更容易檢測的當前狀態,然後改變到另一

netsh interfave ipv4 show dnsservers "Wi-Fi" | find "DHCP" > nul 
if errorlevel 1 (
    netsh interface ipv4 set dnsservers "Wi-Fi" dhcp 
) else (
    netsh interfave ipv4 add dnsservers "Wi-Fi" address=127.0.0.1 index=1 
) 

第一netsh命令讀取當前配置和find搜索字符串「DHCP」。如果找不到(errorlevel == 1),請將配置更改爲dhcp,否則(請參閱括號放置,請參閱here)將配置更改爲本地dns服務器

+0

非常好,很好解釋。謝謝! – 2014-09-03 11:57:19

相關問題