【问题标题】:Batch File to retrieve Local Area Connection Name in Windows XP在 Windows XP 中检索本地连接名称的批处理文件
【发布时间】:2012-04-06 14:39:37
【问题描述】:

我目前正在编写一个简单的批处理脚本来自动设置 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?

任何帮助将不胜感激:)

【问题讨论】:

    标签: batch-file windows-xp lan


    【解决方案1】:

    我已经在 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 语句而不是括号中的脚本。当环境变量在括号中的脚本中没有按预期运行时,人们经常会感到困惑。我发现调用标签使脚本更易于使用。

    编辑:解释。

    For 命令读取文件或命令结果的每一行。
    In ('command') 告诉它读取command 的每一行结果。
    skip=2 跳过前两行输出,在这种情况下,列标题。
    tokens=4* 表示将每一行的第四件事作为一个变量 (4) 读取,之后的所有内容作为另一个变量 (*)。 %%a 表示将上述标记分别存储在%%a%%b 中。
    Do (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
    

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

    【讨论】:

    • 非常感谢您的帮助:) 但是,我是批处理脚本的新手(虽然我有编程知识)。你能解释一下脚本中发生了什么吗?顺便说一句,在 Windows XP 中,我使用“netsh interface ip show address”来获取每个网络连接的名称列表和 ip/子网/掩码信息
    • 不幸的是,我无法在此处获得任何 XP 计算机来运行 NetSh Interface IP Show Interface。有关脚本的说明,请参阅我的答案。
    • 非常感谢..我明白了,我会尝试为 windows xp 调整:)
    • 对于 XP 调整 Hand-E-Food 代码:您必须输入“netsh interface ip”而不是“netsh interface ipv4 ...”。另一个问题是即使代码在 XP 上运行没有错误,它也不会显示任何连接/接口信息。不过,这可能与远程访问服务有关。
    • 我使用了@Hand-E-Food 代码,但它没有显示任何内容。我必须使用skip=3,然后显示我的第一个界面(环回)。但是,不显示以下内容。知道为什么吗?我正在使用 Win7 和 NetSh Interface IP Show Interface 显示 5 个接口(其中 3 个是“已连接”)
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多