web-dev-qa-db-ja.com

コマンドプロンプトで「&」文字のエスケープはありますか?

私は次のようなことを試みています:

set pwd = abc&123
echo password %pwd%

結果は...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

システムはこのようなものですか、またはそのようなキャラクターの脱出はありますか?

11
deostroll

あなたがする必要があるのは、次のようにパスワードを二重引用符で囲むことです:

set pwd="abc&123"
echo %pwd%

どうなるか教えてください。

9
Carlos

私はそれがマルティノーの答えとmastashake57の答えの両方の組み合わせで最もよく機能することを発見しました。

set pwd=abc^&123
echo %pwd%

それでも失敗し、

set pwd="abc&123"
echo %pwd%

引用符を追加します(forループまたは文字列操作では、アンパサンドのおかげで再び失敗するため、引用符を削除できません)。これはそれほど素晴らしいことではありません。

しかしながら、

set "pwd=abc^&123"
echo %pwd%

完璧に動作します。

お役に立てば幸いです。

7
BDM

コマンドラインリファレンスヘルプファイルから:

アンパーサンド(&)、パイプ(|)、および括弧()は、引数として渡すときにエスケープ文字(^)または引用符の前に置く必要がある特殊文字です。

処理が必要な文字が3文字以上ある場合は、パスワード全体を引用符で囲む方が、個々の文字をエスケープするよりも簡単なようです。

7
martineau

あなたが本当に必要なのは:

set pwd=abc^^^&123
echo %pwd%

または:

set "pwd=abc^&123"
echo %pwd%

説明:

&は特殊文字であるため、^でエスケープする必要があり、結果として^&になります。

set pwd=abc^&123を実行すると、変数が値abc&123に設定されます。その後、echo %pwd%を実行すると、実質的にecho abc&123が実行されます。

ただし、echo abc&123は特殊文字であるため、&は期待どおりに機能しません。引用符を追加することでこれを回避できます:echo "abc&123"出力には引用符文字も含まれます。つまり、引用符を使用することは、適切な解決策とは言えません。

echoコマンドを実行するときに&文字をエスケープする必要があります。

echo abc^&123

したがって、変数には値abc^&123を含める必要があります。変数を値abc^&123に設定するには、特殊文字^および&をエスケープする必要があります。その結果、次のようになります。

set pwd=abc^^^&123
4
Pacerier