如何制作DNS"切换"批处理文件

时间:2014-09-03 02:58:27

标签: batch-file dns

我试图创建一个批处理文件,如果它们是其他东西,则将我的DNS设置设置为本地主机,如果它们是localhost,则自动生成。到目前为止我所做的是:

set var=1

if "%var%" == "1"
(
netsh interface ipv4 add dnsserver "Wi-Fi" address=127.0.0.1 index=1
set var=2
)

if "%var%" == "2"
(
netsh interface ip set dns “Wi-Fi” dhcp
set var=1
)

pause

显然,这些变量不是永久性的,也不会拯救"。该问题的编号为1.然而,这个脚本甚至不会将其更改为本地主机地址。此外,如果它确实有效,则脚本有明显的挫折,即没有检测到DNS设置是否已被某些其他方式更改。我被卡住了,因为我的谷歌不能接受找出我做错的挑战。

1 个答案:

答案 0 :(得分:1)

if命令中的左括号必须与if命令

在同一行中

不,环境变量没有"已保存"。每个进程都有自己的环境变量副本,而从其他进程进行的更改在其他进程中是不可见的。变量中的值保持与设置它的过程一样长,或者直到过程移除其值。要保留变量,您需要将其显式保存到注册表(请参阅setx /?)或文件(稍后您必须阅读)。

并且,您的代码存在逻辑错误。在批处理文件中,代码从一行执行到下一行,除非有什么改变,所以

if %var%==1 (
    change to state 1
    set var=2
)
if %var%==2 (
    change to state 2
    set var=1
)

如果进入第二个,没有什么能阻止执行离开第一个。执行此代码时,它将始终更改为状态2.

检测当前状态然后更改为其他

应该更容易
netsh interfave ipv4 show dnsservers "Wi-Fi" | find "DHCP" > nul
if errorlevel 1 (
    netsh interface ipv4 set dnsservers "Wi-Fi" dhcp
) else (
    netsh interfave ipv4 add dnsservers "Wi-Fi" address=127.0.0.1 index=1
)

第一个netsh命令读取当前配置和find搜索字符串" DHCP"。如果未找到(errorlevel == 1)将配置更改为dhcp,则(请参阅括号放置,请参阅here)将配置更改为本地DNS服务器