在批處理傳參時,參數可能帶有引號(例如拖入文件對象時,文件路徑就是帶引號的),以下為示例:
@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%
閱讀更多 軟件測試 的文章