特殊文字を含む環境変数を変更するにはどうすればよいですか?

特殊文字を含む環境変数を変更するにはどうすればよいですか?

$P$_CMD>私のプロンプトは(末尾にスペースあり)に設定されています。これはうまく機能します。しかし、仮想環境アクティブ化.bat次の行があります:

set PROMPT=(approot) %PROMPT%

このコマンドを実行すると、cmdは次のように警告します。

The syntax of the command is incorrect.

"プロンプトを変更する前は、このようなことは起こりませんでした。 の周囲に引用符 (二重引用符と一重引用符')を追加してみました%PROMPT%が、うまくいきませんでした。古い値に特殊文字が含まれている場合、古い値を利用してプロンプトを変更するにはどうすればよいでしょうか?

答え1

prompt変数では、特殊文字を使用しないでください。常にspecial codes可能な限りいつでも見つけることができますprompt /?

あなたのコメントへの返信:

他の変数では、SetLocal EnableDelayedExpansion!次に、 sの代わりに sを使用して変数を参照します%

遅延展開は、変数を解析時ではなく実行時に展開します。このオプションは でオンになりますSETLOCAL command。遅延展開が有効な場合、変数は!variable_name!(通常の に加えて%variable_name%) を使用して参照できます。

変数は実行時に展開され、特殊文字>(この場合) は解析時にのみ特殊となるため、問題を完全に回避できます。

例えば:

SetLocal EnableDelayedExpansion

set test=World^>
set test2=Hello !test!

はエスケープ文字であり、特殊文字を入力できることに注意してください^(変数は として保存されるため、 を実行して の保存値にWorld>ならない限り、これは質問には機能しません)。set test=World^^^>World^>

エスケープは複雑になることがあります。たとえば、test2リテラル を設定するには!test!を使用する必要があります^^!test^^!。そうしないと、 の値が取得されますtest。本当に必要な場合は、通常は、エスケープ文字の数を変えて動作を確認します。解析ルールを理解するよりも簡単です。

関連情報