1. 程式人生 > >Bat 中特殊符號

Bat 中特殊符號

@ \隱藏命令的回顯。

~ \在for中表示使用增強的變數擴充套件; 在set中表示使用擴充套件環境變數指定位置的字串; 在set/a中表示按位取反。

% \使用兩個%包含一個字串表示引用環境變數。比如一個%time%可以擴充套件到當前的系統時間; 單個%緊跟0-9的一個數字表示引用命令列引數; 用於for中表示引用迴圈變數; 連續的兩個%表示執行時脫為一個%。

^ \取消轉義字元,即將所有轉義字元的轉義作用關閉。比如要在螢幕顯示一些特殊的字元,比如> >> | 等時,就可以在其前面加一個符號來顯示這個後面的字元了,就是顯示一個,^|就是顯示一個|字元了; 在set/a中是按位異; 在findstr/r的[]中表示不匹配指定的字符集。

& \命令連線字元。比如我要在一行文字上同時執行兩個命令,就可以用&命令連線這兩個命令; 在set/a中是按位與。

\代表任意個任意字元,就是我們通常所說的"萬用字元";比如想在c盤的根目錄查詢c盤根目錄裡所有的文字檔案(.txt),那麼就可以輸入命令"dir c:*.txt"; 在set/a中是乘法。比如"set/a x=4*2",得到的結果是8; 在findstr/r中表示將前一個字元多次匹配。

() \命令包含或者是具有優先權的界定符吧,比如for命令要用到這個(),我們還可以在if,echo等命令中見到它的身影;

\範圍表示符,比如日期的查詢,for命令裡的tokens操作中就可以用到這個字元; 在findstr/r中連線兩個字元表示匹配範圍; -跟在某些命令的/後表示取反向的開關。

\主要是在copy命令裡面會用到它,表示將很多個檔案合併為一個檔案,就要用到這個+字元了; 在set/a中是加法。

| \管道符。就是將上一個命令的輸出,作為下一個命令的輸入."dir /a/b | more"就可以逐屏的顯示dir命令所輸出的資訊; 在set/a中是按位或; 在幫助文件中表示其前後兩個開關、選項或引數是二選一的。

: \標籤定位符,可以接受goto命令所指向的標籤。比如在批處理檔案裡面定義了一個":begin"標籤,用"goto begin"命令就可以轉到":begin"變遷後面來執行批處理命令了。

" " \界定符,在表示帶有空格的路徑時常要用"“來將路徑括起來,在一些命令裡面也需要” "符號; 在for/f中將表示它們包含的內容當作字串分析; 在for/f "usebackq"表示它們包含的內容當作檔案路徑並分析其檔案的內容; 在其它情況下表示其中的內容是一個完整的字串,其中的>、>>、<、&、|、空格等不再轉義。

/ \表示其後的字元(串)是命令的功能開關(選項)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的引數; 在set/a中表示除法。

\命令重定向符,將其前面的命令的輸出結果重新定向到其後面的裝置中去,後面的裝置中的內容被覆蓋。比如可以用"dir > lxmxn.txt"將"dir"命令的結果輸出到"lxmxn.txt"這個文字檔案中去; 在findstr/r中表示匹配單詞的右邊界,需要配合轉義字元\使用。

\命令重定向符。將其前面的命令的輸出結果重新定向到其後面的裝置中去,後面裝置中的內容沒有被覆蓋。

< \將其後面的檔案的內容作為其前面命令的輸入。 在findstr/r中表示匹配單詞的左邊界,需要配合轉義字元\使用。

= \賦值符號,用於變數的賦值。比如"set a=windows"的意思意思是將"windows"這個字串賦給變數"a"; 在set/a中表示算術運算,比如"set /a x=5-6*5"。

\這個""符號在有的情況下,代表的是當前路徑的根目錄.比如當前目錄在c:\windows\system32下,那麼你"dir “的話,就相當與"dir c:” 在findstr/r中表示正則轉義字元。

‘’ 在for/f中表示將它們包含的內容當作命令列執行並分析其輸出; 在for/f "usebackq"中表示將它們包含的字串當作字串分析。

. \ 在路徑的\後緊跟或者單獨出現時: 一個.表示當前目錄; 兩個.表示上一級目錄; 在路徑中的檔名中出現時: 最後的一個.表示主檔名與擴充套件檔名的分隔。

&& \連線兩個命令,當&&前的命令成功時,才執行&&後的命令;

|| \連線兩個命令,當||前的命令失敗時,才執行||後的命令。

$ \在findstr命令裡面表示一行的結束。

`` 在for/f中表示它們所包含的內容當作命令列執行並分析它的輸出。

[] 在幫助文件表示其中的開關、選項或引數是可選的; 在findstr/r中表示按其中指定的字符集匹配。

? \在findstr/r中表示在此位置匹配一個任意字元; ?在路徑中表示在此位置通配任意一個字元; 緊跟在/後表示獲取命令的幫助文件。

! \當啟用變數延遲時,使用!!將變數名擴起來表示對變數值的引用; 在set /a中表示邏輯非。比如set /a a=!0,這時a就表示邏輯1。

上面就是強調了半天的特殊字元了,但如果我們需要把他們當做字串引數傳遞時該怎麼辦那,不用說首先考慮到的是加“”然後再轉義成字元處理,但我的實踐告訴我">","<","@","|"不能實現自己想要的功能,正在頭痛的時候想到了一個好辦法,就是將這個特殊字元在ASCII表中的十進位制數拿出來替換掉這些該死的東西,然後再解說端再把ASCII的10進位制數換算成ASCII字元處理。

最後驗證效果還是可以的,這樣就避免的bat裡關鍵字衝突的問題