工做須要,要修改不少計算機的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秒後自動關閉
不成功 黑色背景紅色文字,窗口不會自動關閉apache
bat文件申請管理員權限的方法百度上有好幾種,我隨便選擇了一種網絡
附上我使用的代碼.net
@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博主「故三殤」的文檔我參考了部分,感受之後必定還會用到,所以轉載了過來code
CSDN博主「故三殤」的原創文章
原文連接:https://blog.csdn.net/qq_39720249/article/details/85067931blog
@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% 文件已存在,無需建立! )
複製目錄(包括空目錄):rem
@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%目錄已存在,無需建立! )
新建文件get
@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%文件已存在,無需建立! )
新建空目錄cmd
@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%文件已存在,無需建立! )