hosts文件替换

工作需要,要修改很多计算机的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\OutReport到G:\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\OutReport到G:\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%文件已存在,无需创建!
)

Batch批量替换hosts的更多相关文章

  1. spring batch批量处理框架

    spring batch精选,一文吃透spring batch批量处理框架 前言碎语 批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息 ...

  2. 在Vi里面实现字符串的批量替换

    在Vi里面实现字符串的批量替换. a. 文件内全部替换: %s#abc#def#g(用def替换文件中所有的abc) 例如把一个文本文件里面的"linuxidc.com"全部替换成 ...

  3. 帝国cms内容批量替换

    方法一:栏目-其他相关-批量替换字段值 方法二:通过sql替换           UPDATE phome_ecms_news SET body=REPLACE(body,'原来','现在')

  4. 在Visual Studio中使用正则表达式匹配换行和批量替换

    系统环境:Windows 8.1 Enterprise Update 2 x64 开发环境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC 问题:如 ...

  5. linux下批量替换文件内容

    1.网络上现成的资料 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串: (此命令很强大) ...

  6. dedecms文章标题是在哪个数据库表?要批量替换关键词

    一位小MM刚接触dedecms没多久还不熟悉后台的操作,她说改dedecms文章中的品牌名改到手酸,问ytkah是否有批量替换关键词的方法,教了她dedecms后台批量替换文章中的关键词方法,她高兴坏 ...

  7. sql数据库批量替换dedecms内容关键字

    之前写了一篇dedecms后台批量替换文章中的关键词,这边我们介绍一下用sql数据库批量替换dedecms内容关键字,当然要求你对数据库比较熟悉,修改前请自行做好备份. 1.更改文章中的内容 upda ...

  8. dedecms后台批量替换文章中的关键词

    DEDECMS怎么样能快捷或者批量修改网站所有文章的超链接和锚文本,超链和所有关键词锚文本的链接需要修改? dedecms后台批量替换文章中的关键词

  9. Powershell 批量替换文件

    Powershell 批量替换文件 ##作者:Xiongpq ##时间:2015-06-10 18:50 ##版本:2.0 ##源文件目录 ##源文件目录的所有文件都会覆盖目标目录的同名文件,源文件目 ...

随机推荐

  1. 在ubuntu永久添加alias

    1. cd 进入家目录 操作如下: cd ~ 2.显示隐藏文件 操作如下:ls -al 3.vim打开.bashrc 操作如下: vim .bashrc 4.按a编辑添加alias example=' ...

  2. wsgiref模块

    学习django框架之前,可以先学习一下wsgiref模块,熟悉前后端交互. 一.先介绍下wsgiref模块 WSGI(Web Server Gateway Interface)是一种规范,它定义了使 ...

  3. Ora 命令行建立账号

    .使用cmd 进入 sqlplus /nolog conn system/ as sysdba .修改密码 alter user ebthis identified by new_psw; .查看用户 ...

  4. CodeBlocks17.12配置GNU GCC + 汉化

    Codeblocks17.12以及Gcc和汉化包链接: 链接:https://pan.baidu.com/s/1F23fjvi8xRpQ9xR14ILpEA 提取码:90d6 一.TDM-GCC 的安 ...

  5. 吴裕雄 python 神经网络——TensorFlow 滑动平均类的保存

    import tensorflow as tf v = tf.Variable(0, dtype=tf.float32, name="v") for variables in tf ...

  6. node vue 项目git 管理

    push 上传到云的时候,依赖包及相关文件是不上传上去的, 所以每次克隆到本地后,node 项目运行前须要 npm install 安装对应依赖 vue 项目编译前也须要  npm install,安 ...

  7. linux下postgres创建hive数据库

    操作步骤 #登录 [root@xxx01 ~]# su postgres bash-4.2$ psql -U postgres could not change directory to " ...

  8. 640js 的css 在750js 下用

    <script> // 640js的css样式调整至750js $(function(){ function fontsize640to750(){ var font640=$('html ...

  9. Dart语言学习(十三) Dart Mixins 实现多继承

    Mixins Mixins(混入功能)相当于多继承,也就是说可以继承多个类,使用with关键字来实现Mixins的功能. 那么多个类中有相同的方法时候,会被覆盖吗?覆盖的先后是什么? class A{ ...

  10. Python 之并发编程之线程上

    一.线程概念 进程是资源分配的最小单位 线程是计算机中调度的最小单位 多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都 ...