2015-11-13 60 views
1

我有這個代碼工作在我的CMD promt(用%代替%%),但是當我通過.bat文件執行它時,它不工作。循環工作在CMD提示符,但不是批處理文件

for /f "tokens=5 delims=: " %%G in ('netsh interface IPv4 show dnsserver "Ethernet 2" ^| findstr /C:"Servidores DNS configurados estáticamente"') DO (Echo %%G) 

我想要做一個.bat,換掉我的主DNS和另一個DNS。我用這樣的嘗試:

@echo off 
cls 
color A 
cls 

SET DNS1=46.101.36.120 
SET DNS2=46.101.149.135 
SET DNSGoogle1=8.8.8.8 
SET DNSGoogle2=8.8.4.4 
SET NAME=Ethernet 2 


for /f "tokens=5 delims=: " %%G in ('netsh interface IPv4 show dnsserver "%NAME%" ^| findstr /C:"Servidores DNS configurados estáticamente"') DO IF %DNSGoogle1%==%%G (goto netflixDNS) ELSE (goto googleDNS) 


:netflixDNS 
echo "Netflix DNS" 
netsh interface ipv4 delete dnsserver "%NAME%" all 
netsh interface ip set dnsservers "%NAME%" static %DNS1% 
netsh interface ip add dnsservers "%NAME%" %DNS2% index=2 
ipconfig /flushdns 
PAUSE 
EXIT 

:googleDNS 
echo "Google DNS" 
netsh interface ipv4 delete dnsserver "%NAME%" all 
netsh interface ip set dnsservers "%NAME%" static %DNSGoogle1% 
netsh interface ip add dnsservers "%NAME%" %DNSGoogle2% index=2 
ipconfig /flushdns 
PAUSE 
EXIT 

出於某種原因,我FOR是不工作...

+2

這是因爲'了'性格。我會簡單地將文本縮短爲「Servidores DNS configurados est」。 – wOxxOm

回答

3

雖然wOxxOm的意見得到解決,這個問題需要一些解釋:公然mojibake情況。爲避免這種情況,請在保存的同一代碼頁下運行批處理腳本:如果保存爲ANSI編碼(notepad),則假定爲CP1252

爲了證明這一點:

請不要插入下一段代碼片段到批處理腳本。 複製&粘貼它在打開命令行窗口:

chcp 850>NUL 
echo áéíóúüýñäëêöã 850>ew-850.txt 
chcp 1252>NUL 
echo áéíóúüýñäëêöã 1252>ew1252.txt 
for %G in (437 850 1252) do @chcp %G&>NUL timeout /T 1 &findstr "^" "ew*.txt" 

輸出

==> chcp 850>NUL 

==> echo áéíóúüýñäëêöã 850>ew-850.txt 

==> chcp 1252>NUL 

==> echo áéíóúüýñäëêöã 1252>ew1252.txt 

==> for %G in (437 850 1252) do @chcp %G&>NUL timeout /T 1 &findstr "^" "ew*.txt" 
Active code page: 437 
ew-850.txt:áéíóúü∞ñäëêö╞ 850 
ew1252.txt:ßΘφ≤·ⁿ²±ΣδΩ÷π 1252 
Active code page: 850 
ew-850.txt:áéíóúüýñäëêöã 850 
ew1252.txt:ßÚݾ·³²±õÙÛ÷Ò 1252 
Active code page: 1252 
ew-850.txt: ‚¡¢£ì¤„‰ˆ」Æ 850 
ew1252.txt:áéíóúüýñäëêöã 1252 

==> 

用(不完全分類)Czech and Slovak accented letters和中歐編碼(代碼頁CP852和​​另一個例子):

chcp 852>NUL 
echo áéíóúůýňěščřž 852>ee-852.txt 
chcp 1250>NUL 
echo áéíóúůýňěščřž 1250>ee1250.txt 
for %G in (437 852 1250) do @chcp %G&>NUL timeout /T 1 &findstr "^" "ee*.txt" 

編輯:另一個額外說明性示例(複製&粘貼到cmd窗口中)。

ECHO OFF 
chcp 850>NUL 
echo echo %~0 [áéíóúüýñäëêöã] 850>ew-850.bat 
chcp 1252>NUL 
echo echo %~0 [áéíóúüýñäëêöã]1252>ew1252.bat 
chcp 850>NUL 
ew-850.bat 
ew1252.bat 
chcp 1252>NUL 
ew-850.bat 
ew1252.bat 
ECHO ON 

輸出

==> ECHO OFF 
chcp 850>NUL 
echo echo %~0 [áéíóúüýñäëêöã] 850>ew-850.bat 
chcp 1252>NUL 
echo echo %~0 [áéíóúüýñäëêöã]1252>ew1252.bat 
chcp 850>NUL 
ew-850.bat 
ew-850.bat [áéíóúüýñäëêöã] 850 
ew1252.bat 
ew1252.bat [ßÚݾ·³²±õÙÛ÷Ò]1252 
chcp 1252>NUL 
ew-850.bat 
ew-850.bat [ ‚¡¢£ì¤„‰ˆ」Æ] 850 
ew1252.bat 
ew1252.bat [áéíóúüýñäëêöã]1252 
ECHO ON 

==> 
相關問題