zoukankan      html  css  js  c++  java
  • Batch批量替换hosts

    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%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
    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:WindowsSystem32driversetchosts
    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:Jmeterapache-jmeter-5.0
    eportackup
    esult.jtl
    SET GenFile=G:Jmeterapache-jmeter-5.0
    eportjtl-report-output
    esult.jtl
    
    if not exist %GenFile% (
            rem 复制文件result.jtl
            copy %SourceFile% %GenFile%
            echo %GenFile% 文件不存在,已创建该文件!
        ) else (
            echo %GenFile% 文件已存在,无需创建!
        )
    

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

    @echo off
    echo OutReport目录判断
    SET SourceFolder=G:Jmeterapache-jmeter-5.0
    eportackupOutReport
    SET GenFolder=G:Jmeterapache-jmeter-5.0
    eportOutReport
    
    if not exist %GenFolder% (
            rem 复制目录G:Jmeterapache-jmeter-5.0
    eportackupOutReport到G:Jmeterapache-jmeter-5.0
    eport路径下
            Xcopy %SourceFolder% %GenFolder%  /s/e/h/i
            echo %GenFolder%目录不存在,已创建该目录!
        ) else (
            rem 目录G:Jmeterapache-jmeter-5.0
    eportOutReport已存在,无需创建
            echo %GenFolder%目录已存在,无需创建!
        )
    

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

    @echo off
    echo result.jtl文件判断
    SET SourceFile=G:Jmeterapache-jmeter-5.0
    eportackup
    esult.jtl
    SET GenFile=G:Jmeterapache-jmeter-5.0
    eportjtl-report-output
    esult.jtl
    
    if not exist %GenFile% (
            rem 复制文件result.jtl
            copy %SourceFile% %GenFile%
            echo %GenFile% 文件不存在,已创建该文件!
        ) else (
            echo %GenFile% 文件已存在,无需创建!
        )
    
    echo OutReport目录判断
    SET SourceFolder=G:Jmeterapache-jmeter-5.0
    eportackupOutReport
    SET GenFolder=G:Jmeterapache-jmeter-5.0
    eportOutReport
    
    if not exist %GenFolder% (
            rem 复制目录G:Jmeterapache-jmeter-5.0
    eportackupOutReport到G:Jmeterapache-jmeter-5.0
    eport路径下
            Xcopy %SourceFolder% %GenFolder%  /s/e/h/i
            echo %GenFolder%目录不存在,已创建该目录!
        ) else (
            rem 目录G:Jmeterapache-jmeter-5.0
    eportOutReport已存在,无需创建
            echo %GenFolder%目录已存在,无需创建!
        )
    

    通过新建方法创建文件和目录

    新建文件

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

    新建空目录

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

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

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

    新建文件和目录

    @echo off
    echo result.jtl文件判断
    SET GenFile=G:Jmeterapache-jmeter-5.0
    eportjtl-report-output
    esult.jtl
    
    if not exist %GenFile% (
            rem 创建空文件G:Jmeterapache-jmeter-5.0
    eportjtl-report-output
    esult.jtl
            rem 如果需要添加内容,少量的,可以用内容把“nul”替换掉,比如:type 这是文件内容>%GenFile%;多的话则使用复制方法
            type nul>%GenFile%
            echo %GenFile%文件不存在,已创建该文件!
        ) else (
            rem 文件G:Jmeterapache-jmeter-5.0
    eportjtl-report-output
    esult.jtl已存在,无需创建
            echo %GenFile%文件已存在,无需创建!
        )
    
    
    echo OutReport目录判断
    SET GenFolder=G:Jmeterapache-jmeter-5.0
    eportOutReport
    
    if not exist %GenFolder% (
            rem 创建空目录G:Jmeterapache-jmeter-5.0
    eportOutReport
            rem 创建非空目录,使用复制方法
            echo %GenFolder%目录不存在,已创建该目录!
            md %GenFolder%
        ) else (
            rem 目录G:Jmeterapache-jmeter-5.0
    eportOutReport已存在,无需创建
            echo 目录%GenFolder%目录已存在,无需创建!
        )
    
    
    echo 所有.jtl后缀名文件判断
    SET GenFile="G:Jmeterapache-jmeter-5.0
    eportjtl"***.jtl
    
    if not exist %GenFile% (
            rem 创建空文件G:Jmeterapache-jmeter-5.0
    eportjtl
    ewfile.jtl
            rem 如果需要添加内容,少量的,可以用内容把“nul”替换掉,比如:type 这是文件内容>文件路径新文件名;多的话则使用复制方法
            type nul>G:Jmeterapache-jmeter-5.0
    eportjtl
    ewfile.jtl
            echo %GenFile%文件不存在,已创建该文件!
        ) else (
            rem 文件"G:Jmeterapache-jmeter-5.0
    eportjtl"***.jtl已存在,无需创建
            echo %GenFile%文件已存在,无需创建!
        )
    
  • 相关阅读:
    Linux-vim
    [转载]关于eve模拟器上的VPS配置问题
    [转载]cisco 出现%Error opening tftp://255.255.255.255/cisconet.cfg解决方法
    CCNA-NAT
    CCNA-DHCP
    CCNA-ACL
    CCNA-OSPF 配置
    CCNA-OSPF 基础
    枚举的应用
    带索引的遍历
  • 原文地址:https://www.cnblogs.com/guyk/p/11588327.html
Copyright © 2011-2022 走看看