批处理文件以在Windows XP中检索本地连接名称

时间:2012-03-22 01:58:19

标签: batch-file windows-xp lan

我正在编写一个简单的批处理脚本来自动设置LAN连接的DNS。这是脚本:

REM Set DNS 
netsh interface ip set dns name="Local Area Connection" static X.X.X.X
netsh interface ip add dns name="Local Area Connection" Y.Y.Y.Y index=2
netsh interface ip add dns name="Local Area Connection" Z.Z.Z.Z index=3

但问题是,如果局域网名称不是默认值(即本地连接),则脚本将无效。

有什么方法可以检测所有本地连接名称,并使用批处理文件设置所有这些LAN连接的DNS?

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:10)

我已在 Windows 7 中测试了此代码。您可能需要对 Windows XP 进行一些修改。

@Echo Off
For /f "skip=2 tokens=4*" %%a In ('NetSh Interface IPv4 Show Interfaces') Do (
    Call :UseNetworkAdapter %%a "%%b"
)
Exit /B

:UseNetworkAdapter
:: %1 = State
:: %2 = Name (quoted); %~2 = Name (unquoted)
If %1==connected (
    :: Do your stuff here, for example:
    Echo %2
)
Exit /B

我会注意到我总是使用Call语句而不是括号内的脚本。当环境变量在括号内的脚本中没有表现出预期时,人们常常会感到困惑。我发现调用标签使脚本更易于使用。

编辑: Explination。

For命令读取文件或命令结果的每一行 In ('command')告诉它阅读command结果的每一行 skip=2跳过前两行输出,在本例中为列标题 tokens=4*说要将每行上的第四个内容读作一个变量(4),然后将其作为另一个变量(*)。 %%a表示将上述令牌分别存储在%%a%%bDo (commands)为每一行执行commands

NetSh Interface IPv4 Show Interface的输出是:

Idx     Met         MTU          State                Name
---  ----------  ----------  ------------  ---------------------------
  1          50  4294967295  connected     Loopback Pseudo-Interface 1
 15          50        1500  disconnected  Bluetooth Network Connection
 24          10        1500  connected     Network Bridge

所以我接受第四个令牌(State)和之后的所有令牌(Name)并将它们传递给脚本函数调用。这里将它们作为命令行参数检索,即%1%2 请注意,由于空格,每个名称由两个或三个标记组成,因此使用*而不是5

答案 1 :(得分:0)

Windows XP命令'netsh int ip show config'的第一行输出是:

  

接口“本地连接”的配置

@echo off
for /F tokens^=2^ delims^=^" %%a in ('netsh int ip show config') do set "sUserFriendyName=%%a"
echo/set http://www.opendns.com/ DNS for interface "%sUserFriendyName%"
netsh int ip delete dns "%sUserFriendyName%" all
netsh interface ip set dns name="%sUserFriendyName%" source=static addr=208.67.222.222 register=PRIMARY
netsh interface ip add dns name="%sUserFriendyName%" addr=208.67.220.220 index=2
ipconfig /flushdns