天天看點

Batch語言整理

應用batch語言,寫成**.bat檔案,對于自動化測試是比較有幫助的。

batch語言,相對比較簡單,明了。

今天整理下以前曾經用到的類似的batch語句。

1.ping www.baidu.com > a.txt 将ping baidu的網址儲存到目前路徑的a.txt中。

ping 127.0.0.1 -t > b.txt 保持一直ping ip,這樣對于在自動化測試中的排查漏是有幫助的。

ping -30 127.0.0.1 >nul 等待30s

2.call

從一個批程式中調用另一個批程式,而不會引起第一個批處理的中止。

call test.bat

當運作至此,調用test.bat

3. :: pause goto : %意義

:: 注釋指令,在批處理腳本中和rem指令等效。

pause 它的作用,是讓目前程式程序暫停一下,并顯示一行資訊:請按任意鍵繼續…

goto是個跳轉指令,直接跳轉到goto 後的操作

:是一個标簽

% 這個百分号嚴格來說是算不上指令的,它隻是批進行中的參數而已。

4.if 語句

(1)輸入判斷

if “%1”==”” goto usage 如果參數為空(無參數),則跳轉到 usage;

if “%1”==”/?” goto usage 如果參數為/?或 help 時(大家一般看一個指令的幫助,是不是輸入的/?或 help 呢,這裡這麼做隻是為了讓這個腳本看起來更像一個真正的程式),也跳轉到 usage。

if “%1”==”help” goto usage 如果參數為help時候,則跳轉到usage

(2)存在判斷

if exist C:\Program\Tencent**.gif del C:\Progra~1\Tencent\AD*.gif

如果存在那些gif,就删除這些檔案。

if exist %RemoteParam% (

copy %RemoteParam% %LocalParam%

)

如果存在該檔案,那麼就将檔案copy到LocalParam路徑.

IF [NOT] ERRORLEVEL number do command

IF [NOT] string1==string2 do command

IF [NOT] EXIST filename do command

if [not] exist [路徑]檔案名 待執行的指令

5.管道指令

|、>、>>

|指令的作用,就是讓前一指令的輸出當做後一指令的輸入。

“ > “、”>> ”這兩個指令的效果從本質上來說都是一樣的,他們都是輸出重定向指令,說的通俗一點,就是把前面指令的輸出寫入到一個檔案中。這兩個指令的唯一差別是,

“>”會清除掉原有檔案中的内容後把新的内容寫入原檔案,而>>隻會另起一行追加新的内容到原檔案中,而不會改動其中的原有内容。

eg:

echo @echo off > a.bat

echo echo This is a pipeline command example. >> a.bat

echo echo It is very easy? >> a.bat

echo echo Believe your self! >> a.bat

echo pause >> a.bat

echo exit >> a.bat

得到 a.bat如下:

@echo off > a.bat

echo This is a pipeline command example. >> a.bat

echo It is very easy? >> a.bat

echo Believe your self! >> a.bat

pause >> a.bat

exit >> a.bat

<、>&、<&

這三個指令也是管道指令,但它們一般不常用。

<,輸入重定向指令,從檔案中讀入指令輸入,而不是從鍵盤中讀入。

&,将一個句柄的輸出寫入到另一個句柄的輸入中。

<&,剛好和>&相反,從一個句柄讀取輸入并将其寫入到另一個句柄輸出中。

&、&&、||

&這可以說是最簡單的一個組合指令了,它的作用是用來連接配接 n 個 DOS 指令,并把這些指令按順序執行,而不管是否有指令執行失敗。

copy a.txt b.txt /y & del a.txt

其實這句和 move a.txt b.txt 的效果是一樣的,隻不過前者是分了兩步來進行的。

@echo off

if exist d:\f.txt copy d:\f.txt c:\f.txt

||

這個指令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執行多條指令時,當遇到一個執行正确的指令就退出此指令組合,不再繼續執行下面的指令。

dir 到某個目錄下:

dir /b | find “LOG” > loglist.txt

6.title設定cmd視窗的标題

title 新标題 #可以看到cmd視窗的标題欄變了

title “This is a test”

7.set設定變量

引用變量可在變量名前後加 % ,即 %變量名%

set #顯示目前所有可用的變量,包括系統變量和自定義的變量

echo %SystemDrive% #顯示系統盤盤符。系統變量可以直接引用

set p #顯示所有以p開頭的變量,要是一個也沒有就設errorlevel=1

set p=aa1bb1aa2bb2 #設定變量p,并指派為 = 後面的字元串,即aa1bb1aa2bb2

echo %p% #顯示變量p代表的字元串,即aa1bb1aa2bb2

echo %p:~6% #顯示變量p中第6個字元以後的所有字元,即aa2bb2

echo %p:~6,3% #顯示第6個字元以後的3個字元,即aa2

echo %p:~0,3% #顯示前3個字元,即aa1

echo %p:~-2% #顯示最後面的2個字元,即b2

echo %p:~0,-2% #顯示除了最後2個字元以外的其它字元,即aa1bb1aa2b

echo %p:aa=c% #用c替換變量p中所有的aa,即顯示c1bb1c2bb2

echo %p:aa=% #将變量p中的所有aa字元串置換為空,即顯示1bb12bb2

echo %p:*bb=c% #第一個bb及其之前的所有字元被替換為c,即顯示c1aa2bb2

set p=%p:*bb=c% #設定變量p,指派為 %p:*bb=c% ,即c1aa2bb2

set /a p=39 #設定p為數值型變量,值為39

set /a p=39/10 #支援運算符,有小數時用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a 參數時,在 = 後面的變量可以不加%直接引用set /a p=”1&0” #”與”運算,要加引号。

set/?

set p= #取消p變量

set /p p=請輸入螢幕上顯示”請輸入”,并會将輸入的字元串指派給變量p注意這條可以用來取代 choice 指令

注意變量在 if 和 for 的複合語句裡是一次性全部替換的,如

@echo off

set p=aaa

if %p%==aaa (

echo %p%

set p=bbb

echo %p% )

結果将顯示aaaaaa因為在讀取 if 語句時已經将所有 %p% 替換為aaa這裡的”替換”,在 /? 幫助裡就是指”擴充”、”環境變量擴充”可以啟用”延緩環境變量擴充”,用 ! 來引用變量,即 !變量名!

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

set p=aaaif %p%==aaa (

echo %p%

set p=bbb

echo !p! )

ENDLOCAL

結果将顯示aaabbb

還有幾個動态變量,運作 set 看不到

%CD% #代表目前目錄的字元串

%DATE% #目前日期

%TIME% #目前時間

%RANDOM% #随機整數,介于0~32767

%ERRORLEVEL% #目前ERRORLEVEL 值

%CMDEXTVERSION% #目前指令處理器擴充名版本号

%CMDCMDLINE% #調用指令處理器的原始指令行可以用echo指令檢視每個變量值,如 echo %time%注意 %time%

8.start指令

start批進行中調用外部程式的指令,否則等外部程式完成後才繼續執行剩下的指令。

start explorer d:\調用圖形界面打開D盤

@echo offcd /d %~dp0regedit /s 勁舞團.regstart patcher.exe

不加 start 指令的話,”勁舞團”運作時,後面會有個黑乎乎的cmd視窗

eg:

cd directory

start Product Registration.exe

9.ren檔案重命名

ren 1.txt 2.bak #把 1.txt 更名為 2.bak

ren .txt .ini #把目前目錄裡所有.txt檔案改成.ini檔案

ren d:\temp tmp #支援對檔案夾的重命名

10 . dir 到某個目錄下:

dir /d | find “LOG” > loglist.txt

示例:使用batch語言,寫出的bat檔案,完成自動化測試的某些操作。

@echo on
title "Automation test"

REM:*************Copy config file from server********
set RemoteFile=F:\Project_docs\trigger.txt
set LocalFile=G:\trigger.txt
#如果存在,則copy到本地目錄
if exist %RemoteFile%  copy %RemoteFile%  %LocalFile%  
if ERRORLEVEL  EXIT
ping -n  .. >null    #等待時間
del F:\Project_docs\trigger.txt #删除已經被download的trigger file

REM:***************change load************
ping -n  .. >null
cd /d C:\Software**\Jenkins_part
call DownSWload.bat    #調用Download.bat
ping -n  .. >null

REM:****************do autotest****************
cd /d C:\Software***\bin
compli.exe -f test.tc  #執行test case

REM:**********Copy result to jenkins  server*****
ping -n  .. >null
cd /d C:\Software\Jenkins_part
call copy_Result.bat    #調用copy result的bat file