藍博科技

藍博資訊 News

聯系我們

地址:杭州市下城區潮王路東方豪園俊豪閣

郵編:310012

電話:0571-81956312

傳真:0571-81956329

郵 箱:yingwl@msn.com

技術支持

當前位置:首頁 > 技術支持

常用批處理符號詳解

文章來源:管理員 點擊量:991 發布時間:2012-04-16

1、@
  一般在它之后緊跟一條命令或一條語句,則此命令或語句本身在執行的時候不會顯示在屏幕上。請把下面的代碼保存為test.cmd文件,然后運行,比較一下兩條echo語句在屏幕上的輸出差異:
復制內容到剪貼板
代碼:
echo a
@pause
@echo b
@pause
  執行結果如下:
引用:
C:\Documents and Settings\JM\桌面>echo a
a
請按任意鍵繼續...
b
請按任意鍵繼續...
2、%、%%
  百分號用在不同的場合,有不同的含義:
  ① 當百分號成對出現,并且其間包含非特殊字符時,一般做變量引用處理,比如:%var%、%str%。把以下代碼保存為批處理文件,運行后觀察屏幕顯示結果:
復制內容到剪貼板
代碼:
@echo off
set str=abc
echo 變量 str 的值是: %str%
pause
  在屏幕上將顯示這樣的結果:
引用:
變量 str 的值是: abc
按任意鍵繼續...
  另外,百分號作為變量引用還有一種特殊形式,那就是對形式參數的引用,此時,單個百分號后面緊跟0~9這10個數字,如%0、%1,請看演示代碼:
復制內容到剪貼板
代碼:
@echo off
if defined str goto next
set str=
set /p str=請把文件拉到本窗口后回車:
call "%~0" %str%
pause
exit

:next
cls
echo 本批處理文件完整路徑為:"%~0"
echo 拖到本窗口的文件完整路徑為:"%~1"
goto :eof
  ② 出現在 set /a 語句中時,表示兩數相除取余數,也就是所謂的模運算,它在命令行窗口和批處理文件中的寫法略有差異:在命令行窗口中,只需要單個的%,在批處理文件中,需要連續兩個百分號,寫成%%。
  例如:在命令行窗口中,運行 set /a num=4%2 ,則結果將顯示0,因為4除以2的余數為0;如果保存為批處理文件,則此語句將略有改變:
復制內容到剪貼板
代碼:
@echo off
set /a num=4%%2
echo 4除以2的余數為 %num%
pause
  ③ 轉義符號:如果要顯示%本身時,需要在前面用%來轉義。例如:
復制內容到剪貼板
代碼:
@echo off
echo 一個百分號:%%
echo 兩個百分號:%%%%
echo 三個百分號:%%%%%%
pause
3、:、::
  ① 以:打頭的單個的:表示該行是一個標簽,它之后的內容是一個標簽段,如:test,則表示:test之下的內容是標簽段,而test是這個標簽段的名,可以用 goto test 、goto :test 跳轉到該標簽段或用 call :test 調用該子過程;而連續兩個冒號打頭表示該行內容為注釋內容,實際上,:: 是個無效的標簽名,:加上空格同樣可以起到注釋的作用,此時,::的功能和注釋命令rem相同;但是,rem 注釋語句中的某些命令符號如重定向符號和管道符號還是會執行,而如果用::來注釋的時候,與::同處一行的所有命令或符號直接被命令解釋器忽略掉,無形中提高了注釋的兼容性和整個程序的執行效率,并且在眾多的命令語句中更顯得醒目,所以,注釋語句推薦使用::的格式。
  ② 在 set 語句中:和~同時使用時,: 起到截取字符串的功能。假設 set str=abcde,那么,set var=%str:~0,1% 表示截取字符串abcde的第一個字符;和=同時使用時,起到替換字符串的功能。假設:set str=abc:de,那么,set var=%str:a=1% 則表示把字符串abc:de中的a替換為1,set var=%str::=2% 則表示把字符串abc:de中的:替換為2;

4、~
  ① 用在 set 語句中,和:同時使用時,起到截取字符串的功能,請參考上一條的解釋;
  ② 用在 set /a 語句中時,它是一元運算符號,表示將操作數字按位取反,例如,set /a num=~1的執行結果是-2,set /a num=~0的結果是-1
  ③ 用在for語句中,表示增強for的功能,能夠提取到更多的信息。例如:在批處理文件的for語句中:%%~i表示去掉第一對外側引號,%%~zi表示獲取文件的大小(以字節為單位),%%~ni表示獲取文件名,%%~xi表示獲取擴展名(帶點號)……它們可以組合使用,如%%~nxi表示獲取文件名和后綴名。

5、>、>>
  一般而言,>表示用新內容覆蓋原文件內容,>>表示向原文件追加內容,此時,它們以重定向符號的身份出現;如果用在 set /a 語句中,則>表示分組,>>表示邏輯移位;

6、|
  一般而言,它以管道符號的身份出現,表示把在它之前的命令或語句的執行結果作為在它之后的命令或語句的處理對象,簡而言之,就是把它之前的輸出作為它之后的輸入,例如:echo abcd|findstr "b",表示把echo abcd的執行結果,作為findstr "b" 的執行對象,也就是在字符串abcd中查找b字符;如果test.txt中有abcd字符串,則該語句與 findstr "b" test.txt 具有同樣的效果;

7、^
  一般而言,^以轉義字符的身份出現。因為在cmd環境中,有些字符具備特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示語句連接……它們都有特定的功能,如果需要把它們作為字符輸出的話,echo >、echo | ……之類的寫法就會出錯——cmd解釋器會把它們作為具有特殊功能的字符對待,而不會作為普通字符處理,這個時候,就需要對這些特殊字符做轉義處理:在每個特殊字符前加上轉義字符^,因此,要輸出這些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之類的格式來處理;

8、&
  一般而言,&表示兩條命令或語句同時執行的意思。如 echo a&echo b,將在屏幕上同時顯示a和b字符。當幾條語句含義近似或作用相同且沒有先后的順序之別時,啟用&符號連接這些語句將會增加程序的可讀性;

9、&&、||
  這是一對含義截然相反的命令符,&&表示如果它之前的語句成功執行,將執行它之后的語句,而||則表示如果它之前的語句執行失敗,將執行它之后的語句;在某些場合,它們能替代 if……else…… 語句;例如:
復制內容到剪貼板
代碼:
@echo off
md test&&echo 成功創建文件夾test||echo 創建文件夾test失敗
pause
  效果等同于如下代碼:
復制內容到剪貼板
代碼:
@echo off
md test
if "%errorlevel%"=="0" (echo 成功創建文件夾test) else echo 創建文件夾test失敗
pause
10、()
  小括號對經常出現在for語句和if語句中,還有一些特定場合;在for和if語句中屬于語句格式的要求,例如:
  ① for %%i in (語句1) do (語句2):在這條語句中,語句1必須用括號對包圍,而語句2的括號對則可視情況予以拋棄或保留:如果語句2是單條語句或用&、&&、||等連接符號連接的多條語句,括號對可以拋棄,如果語句2是有邏輯先后關系的多條語句集合,則必須保留括號對,并且,多條語句必須斷行書寫;例如:
復制內容到剪貼板
代碼:
@echo off
for %%i in (a b c) do echo %%i&echo --------
pause
  也可以改寫為:
復制內容到剪貼板
代碼:
@echo off
for %%i in (a b c) do (
echo %%i
&echo --------
)
pause
  ② if 條件 (語句1) else (語句2):如果沒有else部分,則語句1的括號對可有可無;如果有else部分,則語句1中的括號對必須保留,此時,語句2中的括號對保留與否,和上一點類似。例如:
復制內容到剪貼板
代碼:
@echo off
if exist test.txt echo 當前目錄下有test.txt
pause
復制內容到剪貼板
代碼:
@echo off
if exist test.txt (echo 當前目錄下有test.txt) else echo 當前目錄下沒有test.txt
pause
復制內容到剪貼板
代碼:
@echo off
if exist test.txt (echo 當前目錄下有test.txt) else (
echo 當前目錄下沒有test.txt
pause
cls
echo 即將創建test.txt文件
cd.>test.txt&&echo 成功創建test.txt
)
pause
  ③ 特定場合下使用括號對,不但可以使代碼邏輯清晰,增強可讀性,還可能會減少代碼量。比如用echo語句構造多行文本內容的時候:
復制內容到剪貼板
代碼:
@echo off
(
echo 第一行
echo 第二行
echo 第三行
)>test.txt
start test.txt
  如果不使用括號對的話,則需要使用如下代碼:
復制內容到剪貼板
代碼:
@echo off
echo 第一行>test.txt
echo 第二行>>test.txt
echo 第三行>>test.txt
start test.txt
11、+、-、*、/
  在 set /a 語句中,這些符號的含義分別為:加、減、乘、除。例如:set /a num=1+2-3*4/5。需要注意的是,這些運算符號遵循數學運算中的優先級順序:先乘除后加減,有括號的先算括號,并且,直接忽略小數點,因此,剛才那個算式的結果是1而不是0或0.6。
  另外,有可能會在代碼中看到這樣的寫法:set /a num+=1、set /a num-=1、set /a num*=1 和 set /a num/=1,這些表示累加、累減、累乘、累除,步長都是1,展開后的完整寫法為:set /a num=num+1、set /a num=num-1、set /a num=num*1 和 set /a num=num/1(set /a 語句中,變量引用可以忽略百分號對或感嘆號對,set /a num=%num%+1 與 set /a num=num+1 等同)

12、equ、neq、lss、leq、gtr、geq
  這幾個命令符是if語句中常用到的數值比較符號,取自英文的關鍵字母,具體的含義為:
引用:
命令符號        含義             英文解釋
EQU             等于             equal
NEQ             不等于                 not equal
LSS             少于                 less than
LEQ             少于或等于       less than or equal
GTR             大于                 greater than
GEQ             大于或等于       greater than or equal