作者:半点闲

时间:2020.11.21

博客:blog.csdn.net/cg_i

因为我有某种怀旧情结并且我知道很多人都有,难道您不渴望美好的旧时光吗? ——半点闲

序言

在GUI时代,你可能会有疑问,为什么要花时间写批处理文件来修改DNS呢?难道它们不是已经成为过去了吗?难道不能通过鼠标几次轻松点击来完成吗?要想解答您的疑惑,先请您想象这样一种工作场景。如果同时修改近500台电脑的DNS呢?且它们还遍布在全县各乡镇的32家机构里,有些位于山区,最远的机构相距60公里左右,并且上述只能您一个人去完成。是的,只有您。您还会觉得轻松吗?不幸的是,这些不是想像而是我的日常。

前言

我知道您们急着想看代码,为助于您对代码的理解,保证程序能够正常运行,我有必要先交待一下,我所处的生产环境软硬件配置。 操作系统采用微软的WindowsXP Embedded 32位;WindowsXP 32位、Windows Embedded Standard7 (32/64位)、Windows7(32/64位)、Windows10 64位;客户机分为PC与升腾图型终端,其中图型终端是业务主力机,用的是微软的WindowsXP Embedded与Windows Embedded Standard7,采用这个系统的好处是,您对当前系统做的任何修改,每次系统重启都将被抹去,还原到初次安装系统时的状态,要想保存当前配置需要管理员权限及特殊命令(代码中会有体现)。这样就不用担心,一般用户无意修改了系统设置,而导致的系统故障,方便了日常维护与管理,当然PC机不存在上述限制。

软硬件环境介绍的虽然简单,但对理解下面即将给出的代码来说已然足够。下面言归正传,好戏即将登场!

setdns.bat

@ECHO OFF
REM *****************************************************
REM * Author:   高玉涵
REM * File: setdns.bat
REM * Date: 20201119
REM * Ver:      v1.1
REM * Declare:  10.30关于修改业务终端网络配置的通知
REM *           1.添加DNS:
REM *             11.x.x.xxx
REM *             11.x.x.xxx
REM *           2.测试DNS
REM *           3.终端保存
REM *           4.重启
REM *****************************************************
setlocal enabledelayedexpansion
set ct=wmic bios get manufacturer|findstr /ic:"centerm">nul&&goto initgoto err:init
for /f "delims=," %%n in ('Getmac /v /nh /fo csv') do ((netsh interface ip set dns name=%%n source=static addr=11.x.x.xxx register=primary&&echo "%%n:DNS1:11.x.x.xxx 成功."&&ping -n 3 127.1>nul)||(echo "%%n 失败"&goto err)(netsh interface ip add dns name=%%n addr=11.x.x.xxx&&echo "%%n:DNS2:11.x.x.xxx 成功."&&ping -n 2 127.1>nul)||(echo "%%n 失败"&goto err)
)
(ping test.xxx>nul&&echo "test.hnnx 测试通过."&&ping -n 3 127.1>nul)||(echo "test.xxx 测试失败!"&&ping -n 3 127.1>nul&goto err):wr
ewfmgr c: -commit
shutdown -r -t 3 -c "配置完毕,系统重启中...!"
goto end:err
color 4
echo "配置失败,请及时联系信息科技部!":end
pause

代码不多在我的机器上能够完美工作,DNS地址11.x.0.xxx及域名test.xxx请修改为您实际使用的。其中几句关键代码为了避免让您产生疑惑,这里单独拿出来解释一下。

wmic bios get manufacturer|findstr /ic:"centerm">nul&&goto init

这一句的目地是先获得机器的BIOS厂家标识信息,再通过findstr命令查找“centerm”(升腾)标识。找到后,GOTO跳转到指定位置执行接下来的代码,否则语句向下执行遇到GOTO语句跳转到代码结束位置结束程序(本次不考虑PC机。

。这样做的目地是为了下面这一行代码。

ewfmgr c: -commit

ewfmgr命令用于提交并保存当前系统设置,是升腾终端特有的命令。

for /f "delims=," %%n in ('Getmac /v /nh /fo csv') do ((netsh interface ip set dns name=%%n source=static addr=11.x.0.xxx register=primary&&echo "%%n:DNS1:11.x.0.xxx 成功."&&ping -n 3 127.1>nul)||(echo "%%n 失败"&goto err)(netsh interface ip add dns name=%%n addr=11.x.0.xxx&&echo "%%n:DNS2:11.x.0.xxx 成功."&&ping -n 2 127.1>nul)||(echo "%%n 失败"&goto err)
)

上面的语句是轮询本机所有网络接口,并将指定主、从DNS添加到所有接口上。有些图型终端配有多个网卡,到底网线插在那个网口上不可知。但可以确定只有一个网口在工作,这里采用简单粗爆的方法都给设置上。当然您也可以进一步修改代码,逐个检查接口状态,实现精确操作。我比较懒加之执行结果,达到了预期目地就不费这个心了。

结束语

最后如何将脚本推送到每台机器并自动执行,从而达到无人值守自动化运营,因超出了本文范畴,这里就不在赘叙了。工作中我是极乐意分享,日常任务往往急切,上述代码难免疏漏及缺点,我真诚地希望同行和读者不吝赐教,不胜感激之至。

最新版本

@ECHO OFF
REM *****************************************************
REM * Author:   高玉涵
REM * File: setdns.bat
REM * Date: 20201119
REM * Ver:      v1.1
REM * LastModify:
REM *           11.30 PC支持
REM * Declare:  10.30关于修改业务终端网络配置的通知
REM *           1.添加DNS:
REM *             11.x.x.xxx
REM *             11.x.x.xxx
REM *           2.测试DNS
REM *           3.终端保存
REM *           4.终端重启
REM *****************************************************
setlocal enabledelayedexpansion
set os=wmic bios get manufacturer|findstr /ic:"centerm">nul&&set os="ct"&goto init
ver|findstr /ic:"10.0.">nul&&set os="win10"&goto init
ver|findstr /ic:"5.1.">nul&&set os="xp"&goto init
ver|findstr /ic:"6.1.">nul&&set os="win7"&goto init:init
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' EQU '0' goto setdns:UACPrompt
echo "正在请求管理员权限..."
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B:setdns
for /f "delims=," %%n in ('Getmac /v /nh /fo csv') do ((netsh interface ip set dns name=%%n source=static addr=11.x.x.xxx register=primary&&echo "%%n:DNS1:11.x.x.xxx 成功."&&ping -n 3 127.1>nul)||(echo "%%n 失败"&goto err)(netsh interface ip add dns name=%%n addr=11.x.x.xxx&&echo "%%n:DNS2:11.x.x.xxx 成功."&&ping -n 2 127.1>nul)||(echo "%%n 失败"&goto err)
)
(ping test.hnnx>nul&&echo "test.xxx 测试通过."&&ping -n 3 127.1>nul)||(echo "test.xxx 测试失败!"&&ping -n 3 127.1>nul&goto err)if !os!=="ct" goto wr
if !os!=="win10" goto win10
if !os!=="xp" goto xp
if !os!=="win7" goto win7goto err:wr
ewfmgr c: -commit
shutdown -r -t 3 -c "配置完毕,系统重启中...!"
goto end:err
color 4
echo "配置失败,请及时联系信息科技部!"
goto end:xp
:win7
:win10
echo "配置成功!":end
pause

通过Windows批处理脚本批量修改DNS相关推荐

  1. windows 批处理脚本编写

    windows 批处理脚本编写 什么是批处理 批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理.批处理文件的扩展名为bat. 目前比较常见 的批处理包含两类:DOS批 ...

  2. windows通过脚本批量设置环境变量(env、path)实战:java环境、scala环境、maven环境、gradle环境、nodejs、git等

    windows通过脚本批量设置环境变量(env.path)实战:java环境.scala环境.maven环境.gradle环境.nodejs.git等 目录

  3. windows系统下批量修改文件后缀

    在Windows系统下批量修改文件后缀要用到 ren命令.在使用win10系统的朋友们肯定会发现系统会给自己推荐一些开机锁屏壁纸, 今天就用这个命令批量保存这些壁纸. 这些壁纸文件目录在: C:\Us ...

  4. iOS使用shell脚本批量修改属性

    背景 公司需要做一系列的壳版本,壳版本如果内容雷同提交到App Store会有被拒绝的风险,除了我在上一篇文章中说道的在壳版本中注入混淆的代码,防止被苹果检测到内容太过雷同而导致审核被拒绝.还有另一种 ...

  5. mongoose 批量修改字段_记一次脚本批量修改数据库字符集所埋下的一个坑及解决思路...

    概述 前段时间参考网上教程用脚本批量修改了数据库的字符集,过了一天后业务反馈某个功能用不了,检查发现数据库字符类型的字段的默认值和说明全部为空,用实验测试了一下果然脚本存在一些bug,后续因此加班了一 ...

  6. windows批处理脚本执行回到桌面的操作

    由于项目开发中的需要,特此记录一下使用windows批处理脚本一步回到桌面的小技巧 操作步骤主要是先生成一个VB语言的脚本,再向脚本里面写入VB指令,执行脚本后删除该临时脚本,代码如下: @echo ...

  7. 使用BAT脚本批量修改文件名的方法

    通过BAT脚本批量修改文件名的办法有两种: 一,先进入想要修改文件名的文件夹中,使用命令: dir /b "*.后缀名" > yuan.xls 从生成含有所需文件名的xls文 ...

  8. 通过BAT脚本批量修改文件名

    通过BAT脚本批量修改文件名的办法有两种: 一,先进入想要修改文件名的文件夹中,使用命令: dir /b "*.后缀名" > yuan.xls 从生成含有所需文件名的xls文 ...

  9. Windows批处理脚本实现批量复制文件并重命名

    有的时候,我们需要对存储位置具有一定规律的大量相似文件进行复制移动和重命名.例如,我最近使用labelme工具标注了一批图片数据,但是每个图片自己生成了一个文件夹.然而在使用的时候,要求所有的图片放在 ...

最新文章

  1. spring源码分析之spring注解@Aspect是如何工作的?
  2. ASP.NET: 简要分析Table类的使用
  3. 关于photoswiper展示时图片自适应的问题
  4. LInux下装jdk
  5. dual mysql 获取序列_MySQL JDBC客户端反序列化漏洞
  6. Akka2使用探索3(Duration 和 Deadline)
  7. python标识符、命名规则及关键字(含笔记)
  8. 解决linux下fflush(stdin)无效
  9. Mybatis解析mapper
  10. 第11章[11.6] Ext JS 自行搭建远端库的包升级版本后找不到的问题解决-The following versions are available
  11. 使用abd工具查看安卓设备cpu处理器是32位或64位
  12. 使用ACCESS数据库时出现“操作必须使用一个可更新的查询”的解决办法
  13. 西电计算机科学与技术排名,西安电子科技大学王牌专业有哪些及专业排名
  14. C/C++, STM32,KEIL warning: #175-D: subscript out of range
  15. lol1.7更新服务器维护,lol12月20日维护公告 v3.0.7.1版本更新内容一览
  16. c语言中int转string,C++中int型与string型互相转换
  17. xshell命令:cd进入指定(目标路径)文件夹 - 解说篇
  18. python判断闰年程序_Python 判断闰年
  19. 2022年镇海夏令营组合数学和数论班 —— 数学作业 1
  20. 中国古代木制机器发展简史

热门文章

  1. Broadcast Recevier回顾及自定义DeviceAdminReceiver模板完善
  2. 如何使用DolphinDB处理Tushare金融数据
  3. 电脑PHP动画制作画板,涂鸦板简单实现 Html5编写属于自己的画画板
  4. DZone每日必读-News:2022 年 Java 开发:预测和选定趋势
  5. 实时数据库 - 笔记
  6. cmd 新增dns_用CMD设置IP DNS的方法
  7. Mac应用程序无法打开或文件损坏的处理方法
  8. 用外置的tocat运行springboot项目的四个步骤
  9. 基于深度搜索的树路径求解_基于深度学习的自动验证码求解器
  10. 原来我还写过这么浪漫的东西