2012-03-22 9 views
1

CALL文でバッチファイルを実行し、それにパラメータを渡す必要があります。私は^記号を使う必要があるまで、すべてうまく動作します。エスケープシーケンスでCALLを使用する^

私はXPを実行しているし、問題が2つの簡単なコマンドで再現できますCALL

私がいないために回避することができますどのように
c:\>call echo password: "secret(<^>)secret" 
password: "secret(<^^>)secret" 

でCALL

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

なければ

CALLを使用するときに^記号を複製しますか?

+1

を読むことができますどこから来たあなたが興味を持っている場合は、パスワードをエコー 'call'を使用する必要がありますか? –

+0

あなたは括弧で囲んでいるようにCALLが必要だと思いますが、遅延拡張がより良い選択です – jeb

答えて

1

CALLは、2回目の再解析の直前にすべてのキャレットを常に2倍にするため、この方法では回避できません。

あなたが本当に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