2012-03-22 22 views
1

我必須通過CALL語句執行批處理文件並將參數傳遞給該文件。一切工作正常,直到我需要使用^標誌。使用帶轉義序列的CALL^

我運行XP,可以通過兩個簡單的命令來重現問題:

沒有CALL

c:\>echo password: "secret(<^>)secret" 
password: "secret(<^>)secret" 

隨着CALL

c:\>call echo password: "secret(<^>)secret" 
password: "secret(<^^>)secret" 

我怎樣才能避免不在使用CALL時複製^符號?

+1

你需要使用'call'呼應的密碼? – 2012-03-22 10:35:58

+0

我想你需要CALL,因爲你在括號內,但延遲擴展是更好的選擇 – jeb 2012-03-22 10:42:46

回答

1

以這種方式,你無法避免它,因爲CALL將在第二次修復該行之前始終加倍所有插入符號。

如果你真的需要使用一個CALL你應該把你的數據在一個變量和擴大這個呼叫脫字加倍後

set "myVar=secret(<^>)secret" 
set myVar 
call echo Password "%%myVar%%" 

但即使如此,你有問題,如果你的祕密包含報價,或者如果您嘗試使用不帶引號的變量。

因此,您最好在這裏使用延遲擴展。
這也將工作(沒有CALL)括號內。

setlocal EnableDelayedExpansion 
(
    set "myVar=secret(<^>)secret" 
    echo !myVar! 
) 

如果你有興趣,其中雙插入記號來自你能讀懂
How does CMD.EXE parse scripts