最近公司有个项目需要对本地hosts文件进行修改,添加一条本地域名解析记录,如果让客户去操作,很容易破坏掉原先的hosts文件,最好是能封装成一个批处理脚本,用户只需要以管理员权限运行,然后根据菜单选择需要执行的功能即可。
1 批处理脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| :: 关闭命令的回显 @echo off :: 设置hosts文件路径 set HOSTS=C:\Windows\System32\drivers\etc\hosts :: 判断当前路径是否存在 hosts.init 文件, 不存在则备份 if not exist %HOSTS%.init ( copy /y %HOSTS% %HOSTS%.init && echo 系统hosts文件备份完成! )
:: %date%=2021年07月07日 :: %time%= 9:12:38:96 :: 年 yyyy = %date:~0,4% 表示指针从左到右偏移 0 位, 然后提取 4 字符 :: 月 mm = %date:~5,2% 表示指针从左到右偏移 5 位, 然后提取 2 字符 :: 日 dd = %date:~8,2% 表示指针从左到右偏移 8 位, 然后提取 2 字符 set yyyymmdd=%date:~0,4%-%date:~5,2%-%date:~8,2% :: 时 hh = %time:~0,2% 表示指针从左到右偏移 0 位, 然后提取 2 字符 :: 分 mm = %time:~3,2% 表示指针从左到右偏移 3 位, 然后提取 2 字符 :: 秒 ss = %time:~6,2% 表示指针从左到右偏移 6 位, 然后提取 2 字符 set hh=%time:~0,2% set mm=%time:~3,2% set ss=%time:~6,2% :: 当 hh 小于等于 9 时, 在前面补 0 if %hh% leq 9 (set hh=0%hh:~1,1%)
GOTO MENU :MENU ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. set /p="请输入您要操作的序号:"<nul @set /p sel= if "%sel%"=="1" goto add_ipdomain if "%sel%"=="2" goto edit_hosts if "%sel%"=="3" goto backup_hosts if "%sel%"=="4" goto reset_hosts if "%sel%"=="5" goto refresh_dns PAUSE :add_ipdomain set /p="请输入IP地址和域名(中间以空格分隔):"<nul @set /p ip_domain= type %HOSTS% |findstr /v "^#"| findstr /i "%ip_domain%\>" if %errorlevel% == 0 ( echo %ip_domain% 已存在,请重新添加!&& goto MENU ) else ( echo.%ip_domain% >> %HOSTS% && echo %ip_domain% 添加成功,请按任意键返回菜单!&& pause >nul ) goto MENU :edit_hosts title 编辑hosts本地域名解析文件 notepad %HOSTS% echo 按任意键返回菜单! pause >nul goto MENU :backup_hosts title 备份hosts文件 set yyyymmdd=%date:~0,4%%date:~5,2%%date:~8,2% copy /y %HOSTS% %HOSTS%.%yyyymmdd%%hh%%mm% echo ("%HOSTS%.%yyyymmdd%%hh%%mm%") 备份完毕,按任意键返回菜单! pause >nul goto MENU pause :reset_hosts title 还原hosts文件 copy /y %HOSTS%.init %HOSTS% echo hosts文件已还原至初始状态,按任意键返回菜单! pause >nul goto MENU :refresh_dns title 刷新本地dns缓存并退出 echo 查看修改后的hosts文件内容,5秒后退出! type "%HOSTS%" |findstr /v "^#"|findstr "[0-9]" ping -n 5 127.0.0.1>nul ipconfig /flushdns echo 刷新本地缓存成功,即将退出! ping -n 3 127.0.0.1>nul echo. exit
|
2 使用方法
2.1 功能菜单
第一次以管理员权限运行脚本会备份一份hosts.init
文件,作为hosts
初始文件,方便以后还原。
2.2 添加域名解析
添加域名解析这里采用的是手动输入 IP
地址 + 域名,并且会检索hosts
文件里是否已经存在对应的 IP
地址和域名,如果存在,则提示用户重新添加。
2.3 编辑 hosts 文件
这里其实就是调用记事本来打开hosts文件。
2.4 备份 hosts文件
这里的备份文件是以hosts.日期时间
的文件名格式来备份的。
2.5 还原 hosts文件
还原其实就是将 hosts.init
去掉后缀名,替换掉原先的 hosts
文件。
2.6 刷新 dns 缓存并退出
在刷新 dns
前,会先将 hosts
文件中的内容打印一下,然后执行刷新 dns
命令后退出脚本。