腳本語言-批處理傳參需要去除多餘的引號

在批處理傳參時,參數可能帶有引號(例如拖入文件對象時,文件路徑就是帶引號的),以下為示例:

@echo off

set p="abc"

call :test %p%

goto:eof

:test

echo %1

這樣打印出來的結果會是"abc"

如果想只要保留參數內部的值abc,不要外面的引號,有2種方式:

在變量讀取時使用替換運算符

變量引用時,支持對內部子串進行替換

表達式為%str:x=y% 。因此

call test %p:"=%

使用變量的引用替換,將p中的所有"替換為空。就達到了去除引號的作用,但副作用可能是傷及p內部存在的引號,如"abc"d"處理後結果會變為abcd,而不是abc"d

利用保留參數的路徑運算符~去除引號

因為批處理文件的參數(%0到%9)經常會用來傳遞文件路徑,路徑往往帶有引號,故對於這些參數有個專門的路徑運算符

例如:

在d:\\programe files\\test2\\abc.bat中使用:(注意%需雙寫)

%0 表示批處理自己的路徑(含引號) "d:\\programe files\\test2\\abc.bat",在%和0之間可插入下列符號,且可組合:

[~|f|d|p|n|x|s|a|t|z]

~表示去除引號<code>%~0=d:\\programe files\\test2\\helloworld.bat/<code>

f表示絕對路徑<code>%f0="d:\\programe files\\test2\\helloworld.bat"/<code>

d表示所在盤符<code>%d0="d:"/<code>

p表示從盤符開始的目錄路徑<code>%p0="\\programe files\\test2\\"/<code>

n表示主文件名<code>%n0="helloworld"/<code>

x表示擴展名<code>%x0=".bat"/<code>

s表示名稱採用縮略格式 d:\\progra~1\\hellow~1.bat

a表示文件屬性:<code>%a0="--a-----"/<code>

t表示文件創建時間 %t0="2015-03-03 11:30"

只要是保留參數格式,就可以使用這些路徑運算符,因此前面的例子中使用

echo %~1

就可去除最外面的引號,且不會誤傷參數內部出現的引號,如"abc"d",輸出結果為abc"d

但這種方式只能用於保留參數如%1 %2 %0等。不適用處理一般變量,如放在p中使用則為語法錯誤

call test %~p%

腳本語言-批處理傳參需要去除多餘的引號


分享到:


相關文章: