首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环在CMD提示符下工作,但不在批处理文件中工作

问for循环在CMD提示符下工作,但不在批处理文件中工作
EN

Stack Overflow用户
提问于 2015-11-14 07:40:56
回答 1查看 288关注 0票数 1

我让这段代码在我的CMD提示上工作(用一个%代替了%%),但是当我通过一个.bat文件执行它时,它不能工作。

代码语言:javascript
复制
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,把我的主域名和次域名换成另外两个。我试着做这样的事情:

代码语言:javascript
复制
@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不能工作了。

EN

回答 1

Stack Overflow用户

发布于 2015-11-14 21:50:34

尽管wOxxOm的评论解决了这个问题,但这个问题需要一些解释:旗帜的mojibake情况。为了避免这种mojibake,请在保存它的相同代码页下运行您的批处理脚本:如果保存为ANSI编码(notepad),则假定为CP1252。

作为证据:

​

  • 以不同的编码显示这些文件,以显示受mojibake影响的字符。

请不要在批处理脚本中插入下一个代码段。Copy & paste it in a open command line window:

代码语言:javascript
复制
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"

输出

代码语言:javascript
复制
==> 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和CP1250)(分类不完整)的另一个示例:

代码语言:javascript
复制
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窗口中)。

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
==> 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

==>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33703449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档