batch-file - 在 Windows XP 中检索本地连接名称的批处理文件

标签 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

但问题是,如果局域网名称不是默认名称(即 Local Area Connection),脚本将无法运行。

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

任何帮助将不胜感激:)

最佳答案

我已经在 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

关于batch-file - 在 Windows XP 中检索本地连接名称的批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815445/

相关文章:

windows - 从 Windows 批处理文件将当前目录传递给可执行文件

visual-studio - Windows XP 上的 Visual Studio

vb6 - 作为启动 RDP 程序运行时如何停止初始表单最大化?

java - AVR 微 Controller 温度传感器通过 LAN 进行通信

batch-file - 如何在FOR循环中批量获取有关当前路径%CD%的信息?

windows - 批量条件错误也执行if语句

batch-file - MSDOS .bat 文件的静态分析器,与 NT 派生版本的 Windows 兼容?

c++ - 哪种屏幕键盘适用于触摸屏应用程序?

Java:列出局域网中计算机的文件和文件夹

Java Socket 编程 LAN Messenger