我试图创建一个批处理文件,如果它们是其他东西,则将我的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设置是否已被某些其他方式更改。我被卡住了,因为我的谷歌不能接受找出我做错的挑战。
答案 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服务器