24

アンパサンドを含む変数があり、最初の変数を含む別の変数を作成する必要があります。「&」文字はキャレット(^)でエスケープできることは知っていますが、変数内のテキストをエスケープする方法がわかりません。

set Name1 = Red ^& Green
set Name2 = %Name1% ^& Blue

「緑」は、内部または外部コマンド、操作可能なプログラム、またはバッチファイルとして認識されません。

アンパサンドを含む変数を「エコー」することさえできません-同じエラーが発生します。

変数の内容を出力に入力したり、次のような変数で指定されたファイルを操作したりするには、変数を使用する必要があります。

type "%Name1%.txt"
type "%Name2%.txt"
4

4 に答える 4

25

最も簡単な解決策は、割り当てに引用符を使用し、拡張を遅らせることです。これにより、エスケープする必要がなくなります。

@echo off
setlocal enableDelayedExpansion
set "Name1=Red & Green"
set "Name2=!Name1! & Blue"
echo !Name2!

引用符で囲まれたテキストと引用符で囲まれていないテキストが混在している場合は、一部の文字をエスケープする必要がある場合があります。ただし、これは最初の割り当てにのみ必要です。遅延展開を使用する場合、変数の内容をエスケープする必要はありません。

@echo off
setlocal enableDelayedExpansion
set var="This & that" ^& the other thing.
echo !var!
于 2013-01-01T07:38:24.227 に答える
9

残念ながら、アンパサンドは2回評価されているため、アンパサンドを二重にエスケープするか、変数値を引用符で囲む必要があります。

set Name1=Red ^^^& Green
set Name2=%Name1% ^& Blue

ただし、Name2を使用する場合に備えて、別のエスケープセットを追加する必要もあります。これは大きな苦痛になります。

set Name1=Red ^^^^^& Green
set Name2=%Name1% ^^^& Blue

または引用符を使用します(推奨)

set "Name1=Red ^& Green"
set "Name2=%Name1% ^& Blue"
于 2013-01-01T05:19:24.467 に答える
0

2つの解決策が思い浮かびますが、どちらも十分に一般的ではありませんが、どちらも「機能」します。

  1. 前のソリューションで説明したように、常に引用符で囲み、必要に応じて削除してください。
  2. &の引用符を再引用してください:set name2 =%name1:&= ^&%^&Blue
于 2013-01-01T06:22:05.170 に答える
-2

最も簡単な解決策は次のとおりです。

for /f "delims= usebackq" %a in (`echo "First & ? * Last"`) do echo # %~a

...バッチスクリプトで:

for /f "delims= usebackq" %%a in (`echo "First & ? * Last"`) do echo # %%~a

また

for /f "delims= usebackq" %%a in (`echo "%~1"`) do echo # %%~a
于 2017-05-19T11:58:22.937 に答える