Batch批量替换hosts

匿名 (未验证) 提交于 2019-12-03 00:11:01

工作需要,要修改很多计算机的hosts文件,采用bat批量完成
解决的问题:
1.pc工作在非管理员权限,右键管理员权限太麻烦,因此采用执行中申请管理员权限的方式
2.hosts和替换脚本放在某台pc机上,其他pc以共享文件夹的方式访问,但cmd命令行无法将UNC路径作为当前目录,这样就不方便识别和脚本同目录的hosts文件.
3.执行备份替换前,要先新版hosts文件是否和Batch文件在同一目录,防止错误操作.
4.不管文件是否完成更新,都需要给出提示,并且自动关闭终端.
对于问题1,参考 https://blog.csdn.net/lijialong1313/article/details/54171535
对于问题2,参考 https://www.jianshu.com/p/2d3190f592c5
对于问题3,参考 https://blog.csdn.net/qq_39720249/article/details/85067931
对于问题4,采用如下方法
替换成功 黑色背景绿色文字,窗口7秒后自动关闭
不成功 黑色背景红色文字,窗口不会自动关闭

bat文件申请管理员权限的方法百度上有好几种,我随便选择了一种

附上我使用的代码

@echo off title hosts文件替换 REM ________________________________________________________________ >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' ( echo 请求管理员权限... goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B  :gotAdmin if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) pushd %~dp0 echo %cd%  REM ________________________________________________________________ echo. echo. SET SourceFile=%cd%\hosts SET GenFile=C:\Windows\System32\drivers\etc\hosts if exist %SourceFile% (     echo.     echo.     color 0A     echo hosts文件存在-备份-更新     move %GenFile% %GenFile%.old     copy %SourceFile% %GenFile%     popd     echo 更新完成     >nul TIMEOUT /T 7 ) else (     color 0C     echo.     echo.     echo hosts文件不存在     pause>nul ) echo. echo.

UNC路径的问题,关键部分代码如下
pushd %~dp0 映射为网络驱动器
popd 释放映射

cd /d %~dp0 echo %cd%  pushd %~dp0 echo %cd% popd pause

CSDN博主「故三殇」的文档我参考了部分,感觉以后一定还会用到,因此转载了过来

CSDN博主「故三殇」的原创文章
原文链接:https://blog.csdn.net/qq_39720249/article/details/85067931

@echo off echo result.jtl文件判断 SET SourceFile=G:\Jmeter\apache-jmeter-5.0\report\backup\result.jtl SET GenFile=G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl  if not exist %GenFile% (         rem 复制文件result.jtl         copy %SourceFile% %GenFile%         echo %GenFile% 文件不存在,已创建该文件!     ) else (         echo %GenFile% 文件已存在,无需创建!     )

复制目录(包括空目录):

@echo off echo OutReport目录判断 SET SourceFolder=G:\Jmeter\apache-jmeter-5.0\report\backup\OutReport SET GenFolder=G:\Jmeter\apache-jmeter-5.0\report\OutReport\  if not exist %GenFolder% (         rem 复制目录G:\Jmeter\apache-jmeter-5.0\report\backup\OutReportG:\Jmeter\apache-jmeter-5.0\report路径下         Xcopy %SourceFolder% %GenFolder%  /s/e/h/i         echo %GenFolder%目录不存在,已创建该目录!     ) else (         rem Ŀ¼G:\Jmeter\apache-jmeter-5.0\report\OutReport已存在,无需创建         echo %GenFolder%目录已存在,无需创建!     )

复制文件和目录(包括空)

@echo off echo result.jtl文件判断 SET SourceFile=G:\Jmeter\apache-jmeter-5.0\report\backup\result.jtl SET GenFile=G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl  if not exist %GenFile% (         rem 复制文件result.jtl         copy %SourceFile% %GenFile%         echo %GenFile% 文件不存在,已创建该文件!     ) else (         echo %GenFile% 文件已存在,无需创建!     )  echo OutReport目录判断 SET SourceFolder=G:\Jmeter\apache-jmeter-5.0\report\backup\OutReport SET GenFolder=G:\Jmeter\apache-jmeter-5.0\report\OutReport\  if not exist %GenFolder% (         rem 复制目录G:\Jmeter\apache-jmeter-5.0\report\backup\OutReportG:\Jmeter\apache-jmeter-5.0\report路径下         Xcopy %SourceFolder% %GenFolder%  /s/e/h/i         echo %GenFolder%目录不存在,已创建该目录!     ) else (         rem Ŀ¼G:\Jmeter\apache-jmeter-5.0\report\OutReport已存在,无需创建         echo %GenFolder%目录已存在,无需创建!     )

新建文件

@echo off echo result.jtl文件判断 SET GenFile=G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl  if not exist %GenFile% (         rem 创建空文件G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl         rem 如果需要添加内容,少量的,可以用内容把“nul”替换掉,比如:type 这是文件内容>%GenFile%;多的话则使用复制方法         type nul>%GenFile%         echo %GenFile%文件不存在,已创建该文件!     ) else (         rem 文件G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl已存在,无需创建         echo %GenFile%文件已存在,无需创建!     )

新建空目录

@echo off echo OutReport目录判断 SET GenFolder=G:\Jmeter\apache-jmeter-5.0\report\OutReport  if not exist %GenFolder% (         rem 创建空目录G:\Jmeter\apache-jmeter-5.0\report\OutReport         rem 创建非空目录,使用复制方法         echo %GenFolder%目录不存在,已创建该目录!         md %GenFolder%     ) else (         rem Ŀ¼G:\Jmeter\apache-jmeter-5.0\report\OutReport已存在,无需创建         echo Ŀ¼%GenFolder%目录已存在,无需创建!     )

目录下是否存在.jtl后缀名文件判断

@echo off echo .jtl后缀名文件判断 SET GenFile="G:\Jmeter\apache-jmeter-5.0\report\jtl"\***.jtl  if not exist %GenFile% (         rem 创建空文件G:\Jmeter\apache-jmeter-5.0\report\jtl\newfile.jtl         rem 如果需要添加内容,少量的,可以用内容把“nul”替换掉,比如:type 这是文件内容>文件路径\新文件名;多的话则使用复制方法         type nul>G:\Jmeter\apache-jmeter-5.0\report\jtl\newfile.jtl         echo %GenFile%文件不存在,已创建该文件!     ) else (         rem 文件"G:\Jmeter\apache-jmeter-5.0\report\jtl"\***.jtl已存在,无需创建         echo %GenFile%文件已存在,无需创建!     )

新建文件和目录

@echo off echo result.jtl文件判断 SET GenFile=G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl  if not exist %GenFile% (         rem 创建空文件G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl         rem 如果需要添加内容,少量的,可以用内容把“nul”替换掉,比如:type 这是文件内容>%GenFile%;多的话则使用复制方法         type nul>%GenFile%         echo %GenFile%文件不存在,已创建该文件!     ) else (         rem 文件G:\Jmeter\apache-jmeter-5.0\report\jtl-report-output\result.jtl已存在,无需创建         echo %GenFile%文件已存在,无需创建!     )   echo OutReport目录判断 SET GenFolder=G:\Jmeter\apache-jmeter-5.0\report\OutReport  if not exist %GenFolder% (         rem 创建空目录G:\Jmeter\apache-jmeter-5.0\report\OutReport         rem 创建非空目录,使用复制方法         echo %GenFolder%目录不存在,已创建该目录!         md %GenFolder%     ) else (         rem Ŀ¼G:\Jmeter\apache-jmeter-5.0\report\OutReport已存在,无需创建         echo Ŀ¼%GenFolder%目录已存在,无需创建!     )   echo 所有.jtl后缀名文件判断 SET GenFile="G:\Jmeter\apache-jmeter-5.0\report\jtl"\***.jtl  if not exist %GenFile% (         rem 创建空文件G:\Jmeter\apache-jmeter-5.0\report\jtl\newfile.jtl         rem 如果需要添加内容,少量的,可以用内容把“nul”替换掉,比如:type 这是文件内容>文件路径\新文件名;多的话则使用复制方法         type nul>G:\Jmeter\apache-jmeter-5.0\report\jtl\newfile.jtl         echo %GenFile%文件不存在,已创建该文件!     ) else (         rem 文件"G:\Jmeter\apache-jmeter-5.0\report\jtl"\***.jtl已存在,无需创建         echo %GenFile%文件已存在,无需创建!     )
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!