cmd批處理經常使用符號詳解

 
一、@
通常在它以後緊跟一條命令或一條語句,則此命令或語句自己在執行的時候不會顯示在屏幕上。請把下面的代碼保存爲test.cmd文件,而後運行,比較一下兩條echo語句在屏幕上的輸出差別:
    echo a
    @pause
    @echo b
    @pause
執行結果以下:
        C:\Documents and Settings\JM\桌面>echo a
        a
        請按任意鍵繼續...
        b
        請按任意鍵繼續...
二、%、%%
百分號用在不一樣的場合,有不一樣的含義:
① 當百分號成對出現,而且其間包含非特殊字符時,通常作變量引用處理,好比:%var%、%str%。把如下代碼保存爲批處理文件,運行後觀察屏幕顯示結果:
    @echo off
    set str=abc
    echo 變量 str 的值是: %str%
    pause
在屏幕上將顯示這樣的結果:
        變量 str 的值是: abc
        按任意鍵繼續...
另外,百分號做爲變量引用還有一種特殊形式,那就是對形式參數的引用,此時,單個百分號後面緊跟0~9這10個數字,如%0、%1,其中,%0爲腳本自己的名稱,%1至%9爲第二至九個參數...最多支持%0~%9,%10之後就是變量引用了,即%15爲%1的值接上5。
請看演示代碼:
    @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
三、:、::
① 以:打頭的單個的:表示該行是一個標籤,它以後的內容是一個標籤段,如: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;
四、~
① 用在 set 語句中,和:同時使用時,起到截取字符串的功能,請參考上一條的解釋;
② 用在 set /a 語句中時,它是一元運算符號,表示將操做數字按位取反,例如,set /a num=~1的執行結果是-2,set /a num=~0的結果是-1
③ 用在for語句中,表示加強for的功能,可以提取到更多的信息。例如:在批處理文件的for語句中:%%~i表示去掉第一對外側引號,%%~zi表示獲取文件的大小(以字節爲單位),%%~ni表示獲取文件名,%%~xi表示獲取擴展名(帶點號)……它們能夠組合使用,如%%~nxi表示獲取文件名和後綴名。
五、>、>>
通常而言,>表示用新內容覆蓋原文件內容,>>表示向原文件追加內容,此時,它們以重定向符號的身份出現;若是用在 set /a 語句中,則>表示分組,>>表示邏輯移位;
六、|
通常而言,它以管道符號的身份出現,表示把在它以前的命令或語句的執行結果做爲在它以後的命令或語句的處理對象,簡而言之,就是把它以前的輸出做爲它以後的輸入,例如:echo abcd|findstr "b",表示把echo abcd的執行結果,做爲findstr "b" 的執行對象,也就是在字符串abcd中查找b字符;若是test.txt中有abcd字符串,則該語句與 findstr "b" test.txt 具備一樣的效果;
七、^
通常而言,^以轉義字符的身份出現。由於在 cmd環境中,有些字符具有特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示語句鏈接……它們都有特定的功能,若是須要把它們做爲字符輸出的話,echo >、echo | ……之類的寫法就會出錯——cmd解釋器會把它們做爲具備特殊功能的字符對待,而不會做爲普通字符處理,這個時候,就須要對這些特殊字符作轉義處理:在每一個特殊字符前加上轉義字符^,所以,要輸出這些特殊字符,就須要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之類的格式來處理;
八、&
通常而言,&表示兩條命令或語句同時執行的意思。如 echo a&echo b,將在屏幕上同時顯示a和b字符。當幾條語句含義近似或做用相同且沒有前後的順序之別時,啓用&符號鏈接這些語句將會增長程序的可讀性;
九、&&、||
這是一對含義截然相反的命令符,&&表示若是它以前的語句成功執行,將執行它以後的語句,而||則表示若是它以前的語句執行失敗,將執行它以後的語句;在某些場合,它們能替代 if……else…… 語句;例如:
    @echo off
    md test&&echo 成功建立文件夾test||echo 建立文件夾test失敗
    pause
效果等同於以下代碼:
    @echo off
    md test
    if "%errorlevel%"=="0" (echo 成功建立文件夾test) else echo 建立文件夾test失敗
    pause
十、()
小括號對常常出如今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
十一、+、-、*、/
在 set /a 語句中,這些符號的含義分別爲:加、減、乘、除。例如:set /a num=1+2-3*4/5。須要注意的是,這些運算符號遵循數學運算中的優先級順序:先乘除後加減,有括號的先算括號,而且,直接忽略小數點,所以,剛纔那個算式的結果是1而不是0或0.6。
另外,有可能會在代碼中看到這樣的寫法:set /a num+=一、set /a num-=一、set /a num*=1 和 set /a num/=1,這些表示累加、累減、累乘、累除,步長都是1,展開後的完整寫法爲:set /a num=num+一、set /a num=num-一、set /a num=num*1 和 set /a num=num/1(set /a 語句中,變量引用能夠忽略百分號對或感嘆號對,set /a num=%num%+1 與 set /a num=num+1 等同)
十二、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
相關文章
相關標籤/搜索