很多情況下,我們需要脫除一個字串中可能會存在的引號,然後在加上自己的引 號使其中的特殊字元(命令串連符& 、| 、&&、||,命令列參數界定符Space 、tab 、 ; 、= ,字元化轉義符^ 、" ,變數化轉義符% 等)字元化,失去特定的作用,而作為 普通的字元成為字串的一個組成部分。
一、將字串中的引號脫去的簡單辦法有三種,它們的功能相近,只是各自的使用 場合不同,可以處理大多數的情況。
1-1 、如果字串存在於命令列參數%1中,可以使用%~1 脫去第一對外側引號,如 果沒有外側引號則字串不變;
1-2 、如果字串存在於for 替代變數%%i 中,可以使用%%~i脫去第一對外側引號, 如果沒有外側引號則字串不變;
1-3 、如果字串存在於環境變數%temp%中,可以使用%temp:"=% 脫去其中所有的 引號,如果沒有引號則字串不變;
1-4 、以上三種方案在某種程度上可以互相通用,因為它們作為變數的一種類型, 可以通過類似以下的代碼或代碼片斷相互轉移:
1-4-1、for替代變數轉命令列參數: call:DeQuote %%i 1-4-2、環境變數轉命令列參數:call:DeQuote %temp% 1-4-3、命令列參數轉for替代變數:for %%i in (%1) do ... 1-4-4、環境變數轉for替代變數:for %%i in (%temp%) do ... 1-4-5、命令列參數轉環境變數:set temp=%1 1-4-6、for替代變數轉環境變數:for ... set temp=%%i
二、如果字串的引號分布情況很複雜,或者我們對被脫去引號的位置有特殊要求, 或者字串中可能出現某些控制字元,則可以將字串首先通過1-4 中的對應方法轉存 至環境變數中,在使用以下方案或其組合進行處理:
2-1 、可以使用set var=%var:~1%脫去環境變數var 串首的第一個引號,如果串首 不存在引號則第一個字元被脫去;
2-2 、可以使用set %var:*"=% 脫去環境變數var 串首的第一個引號,如果串首不 存在引號則變數值不變;
2-3 、可以使用set var=%var:~0,-1% 脫去環境變數var 串尾的最後一個引號,如 果串尾不存在引號則最後一個被脫去;
2-4 、可以使用set "var=%var%脫去環境變數var 串尾的最後一個引號,如果串尾 不存在引號則環境變數被清空;
2-5 、可以使用set var=%var:~1,-1% 脫去環境變數var 串最外側的一對引號,如 果串外側不存在引號則外側一對字元被脫去;
2-6 、可以使用%var:*"=set "var=%脫去環境變數var 串最外側的一對引號,如果 串外側不存在引號則出現語法錯誤;
2-7 、可以使用set "var=%var:"=%"脫去環境變數var 串中可能出現的所有引號, 如果串外側不出現引號則變數值不變;與1-3 不同的是,它容許字串的匹配引號對內 出現特殊控制字元;