bat中的特殊字符,以及需要在bat中當做字符如何處理
(2014-02-27 21:16:55)bat中的特殊字符,以及需要在bat中當做字符如何處理
批處理、Bat 中特殊符號的實際作用,Windows 批處理中特殊符號的作用:
@ \\隱藏命令的回顯。
~ \\在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里關鍵字沖突的問題,算是一個有效的方案。大伙可以試試。