BAT 參數去引號(各種去引號的奇葩方式)_DOS/BAT

來源:互聯網
上載者:User

很多情況下,我們需要脫除一個字串中可能會存在的引號,然後在加上自己的引 號使其中的特殊字元(命令串連符& 、| 、&&、||,命令列參數界定符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 不同的是,它容許字串的匹配引號對內 出現特殊控制字元;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.