如何從用戶傳入的參數中去掉引號?
來源:http://www.cn-dos.net/forum/viewthread.php?tid=20838&fpage=1&highlight=%E5%8E%BB
很多情況下,我們需要脫除一個字符串中可能會存在的引號,然后在加上自己的引號使其中的特殊字符(命令連接符&、|、&&、||,命令行參數界定符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
二、如果字符串的引號分布情況很復雜,或者我們對被脫去引號的位置有特殊要求,或者字符串中可能出現某些控制字符,則可以使用以下方案:
2-1、可以使用%test:*"=%脫去環境變量test串首的第一個引號,如果串首不存在引號則變量值不變;
2-2、可以使用set "test=%test%脫去環境變量test串尾的最后一個引號,如果串尾不存在引號則變量值被清空;
2-3、可以使用%test:*"=set "test=%脫去環境變量test串最外側的一對引號,如果串外側不存在引號則出現語法錯誤;
2-4、可以使用set "test=%test:"=%"脫去環境變量test串中可能出現的所有引號,如果串外側不出現引號則變量值不變;與1-3不同的是,它可以容許字符串的匹配引號對內出現特殊控制字符。
