【发布时间】:2013-09-08 08:01:30
【问题描述】:
如何在 Windows 8 上使用命令提示符或 bat 文件设置我的 DNS 设置
我试过了:
netsh interface ip set dns name="Local Area Connection" source=static addr=none
但没用。
【问题讨论】:
-
首先,以管理员身份运行cmd。
标签: windows-8 dns command-prompt
如何在 Windows 8 上使用命令提示符或 bat 文件设置我的 DNS 设置
我试过了:
netsh interface ip set dns name="Local Area Connection" source=static addr=none
但没用。
【问题讨论】:
标签: windows-8 dns command-prompt
首先,网络名称可能是“以太网”,而不是“本地连接”。要找出名称,您可以这样做:
netsh interface show interface
这将在“接口名称”列下显示名称(此处以粗体显示):
管理状态 状态类型 接口名称 -------------------------------------------------- ---------------------- 已启用连接专用以太网现在您可以更改主 dns (index=1),假设您的接口是静态的(不使用 dhcp):
netsh interface ipv4 add dnsserver "Ethernet" address=192.168.x.x index=1
2018 年更新 - 该命令适用于 dnsserver(单数)或 dnsservers(复数)。下面的例子使用了后者并且也是有效的:
【讨论】:
dhcp 替换为static。
要通过命令将DNS更改为自动,可以运行以下命令:
netsh interface ip set dns "Local Area Connection" dhcp
【讨论】:
设置新dns服务器的批处理文件
@echo off
rem usage: setdns <dnsserver> <interface>
rem default dsnserver is dhcp
rem default interface is Wi-Fi
set dnsserver="%1"
if %dnsserver%=="" set dnsserver="dhcp"
set interface="%2"
if %interface%=="" set interface="Wi-Fi"
echo Showing current DNS setting for interface a%interface%
netsh interface ipv4 show dnsserver %interface%
echo Changing dnsserver on interface %interface% to %dnsserver%
if %dnsserver% == "dhcp" netsh interface ipv4 set dnsserver %interface% %dnsserver%
if NOT %dnsserver% == "dhcp" netsh interface ipv4 add dnsserver %interface% address=%dnsserver% index=1
echo Showing new DNS setting for interface %interface%
netsh interface ipv4 show dnsserver %interface%
【讨论】:
现在您可以更改主 dns (index=1),假设您的接口是静态的(不使用 dhcp)
即使您使用 DHCP 获取 IP 地址,您也可以静态设置 DNS 服务器。
Windows 7下添加两台DN服务器示例,命令如下:
netsh interface ipv4 add dns "Local Area Connection" address=192.168.x.x index=1
netsh interface ipv4 add dns "Local Area Connection" address=192.168.x.x index=2
【讨论】:
我编写了这个脚本,用于将所有当前启用的接口的 DNS 服务器切换到特定地址:
@echo off
:: Google DNS
set DNS1=8.8.8.8
set DNS2=8.8.4.4
for /f "tokens=1,2,3*" %%i in ('netsh int show interface') do (
if %%i equ Enabled (
echo Changing "%%l" : %DNS1% + %DNS2%
netsh int ipv4 set dns name="%%l" static %DNS1% primary validate=no
netsh int ipv4 add dns name="%%l" %DNS2% index=2 validate=no
)
)
ipconfig /flushdns
:EOF
【讨论】:
添加和更改 DNS-IP的命令差别不大:
添加:
Syntax:
netsh interface ipv4 add dnsserver "Network Interface Name" dns.server.ip index=1(for primary)2(for secondary)
Eg:
netsh interface ipv4 add dnsserver "Ethernet" 8.8.8.8 index=1
netsh interface show interface
设置/更改:(按照 OP 的要求)
Syntax:
netsh interface ipv4 set dnsservers "Network Interface Name" static dns.server.ip primary
Eg:
netsh interface ipv4 set dnsservers "Wi-Fi" static 8.8.4.4 primary
netsh interface ipv4 set dnsservers "Wi-Fi" dhcp
最后一个参数可以是none:disable DNS,both:set 用于主 DNS 和辅助 DNS,primary:仅用于主 DNS。您可以注意到这里我们没有像添加 DNS 那样使用索引参数。
您可以在static 的位置输入dhcp 自动设置DNS,但不需要更多参数。
注意:已在 Windows 8、8.1 和 10 中测试。
【讨论】:
primary参数与主/从DNS服务器无关。此参数用于控制 DNS 客户端尝试动态注册其名称的位置(none:不注册;primary:在主 DNS 后缀注册;both:在主 DNS 后缀和连接特定的后缀)。详情请见netsh interface ipv4 set dnsservers /?。
在 Windows 10 上没有一个答案对我有用,所以这是我使用的:
@echo off
set DNS1=8.8.8.8
set DNS2=8.8.4.4
set INTERFACE=Ethernet
netsh int ipv4 set dns name="%INTERFACE%" static %DNS1% primary validate=no
netsh int ipv4 add dns name="%INTERFACE%" %DNS2% index=2
ipconfig /flushdns
pause
这使用 Google DNS。您可以通过命令netsh int show interface获取接口名称
【讨论】:
这是使用 WMIC(Windows Management Instrumentation 命令行)更改 DNS 的另一种方法。
这些命令必须以管理员身份运行才能应用。
清除 DNS 服务器:
wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ()
设置 1 个 DNS 服务器:
wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ("8.8.8.8")
设置 2 个 DNS 服务器:
wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ("8.8.8.8", "8.8.4.4")
在特定网络适配器上设置 2 个 DNS 服务器:
wmic nicconfig where "(IPEnabled=TRUE) and (Description = 'Local Area Connection')" call SetDNSServerSearchOrder ("8.8.8.8", "8.8.4.4")
另一个设置域搜索列表的例子:
wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
【讨论】:
where (IPEnabled=TRUE) 替换为 where "IPEnabled=TRUE"。
这是你的新朋友:QuickSetDNS,来自 NirSoft,一如既往的棒。
它也可以在命令行中使用 :) 与 netsh 相比具有以下优势:
只是一些警告:
【讨论】: