Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在Windows XP中检索本地连接名称的批处理文件_Batch File_Windows Xp_Lan - Fatal编程技术网

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

Batch file 在Windows XP中检索本地连接名称的批处理文件,batch-file,windows-xp,lan,Batch File,Windows Xp,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"

我目前正在编写一个简单的批处理脚本来自动设置局域网连接的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
但问题是,如果局域网名称不是默认名称(即局域网连接),脚本将无法工作

是否有任何方法可以检测所有局域网连接名称并使用批处理文件设置所有局域网连接的DNS

任何帮助都将不胜感激:)

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

我要注意的是,我总是使用
Call
语句,而不是括号内的脚本。当环境变量在括号内的脚本中的行为不符合预期时,人们往往会感到困惑。我发现调用标签使脚本更容易使用

编辑:解释

命令读取文件或命令结果的每一行。
In('command')
告诉它读取
command

skip=2
跳过输出的前两行,在本例中为列标题。
tokens=4*
表示将每行的第四项作为一个变量(
4
)读取,之后的所有内容作为另一个变量(
*
)。
%%a
表示将上述令牌分别存储在
%%a
%%b
中。
Do(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 int ip show config”的第1行输出为:

接口“本地连接”的配置


我非常感谢您的帮助:)然而,我是批处理脚本的新手(尽管我有编程知识)。你能解释一下剧本里是怎么回事吗?顺便说一句,在Windows XP中,我使用“netsh interface ip show address”获取每个网络连接的名称和ip/子网/掩码信息列表。不幸的是,我无法让这里的任何XP计算机运行
netsh interface ip show interface
。有关脚本的解释,请参阅我的答案。非常感谢..我明白了这个想法,我将尝试为windows xp进行调整:)为xp调整手动电子食品代码:您必须键入“netsh interface ip”而不是“netsh interface ipv4…”。另一个问题是,即使代码在XP上运行时没有错误,它也不会显示任何连接/接口信息。这可能与远程访问服务有关。我使用了@Hand-E-Food代码,但它没有显示任何内容。我必须使用skip=3,然后才能显示我的第一个界面(环回)。但是,不显示以下各项。知道为什么吗?我正在使用Win7和
NetSh接口IP显示接口
show5接口(其中3个“已连接”)
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
@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