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


11

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

set pwd = abc&123
echo password %pwd%

結果は...

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

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


回答:


9

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

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

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


1
いくつかのシナリオでは好ましいかもしれないもう一つの選択肢はあるset "pwd=abc&123"
ハリー・ジョンストン

1
-1これが5つの賛成票を持っていたことは衝撃的ですが、それは誤りです。Windowsは%var%または!var!を使用します。自分で簡単にテストできたはずです。$ varはLinuxにあります
。Windowsで

1
@barlop:質問に対処するのは別の行であるため、重要だとは思わない。
ハリージョンストン、

7

私は、マルティノーの回答とmastashake57の回答の両方を組み合わせると最も効果的に機能することを発見しました。

set pwd=abc^&123
echo %pwd%

それでも失敗し、

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

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

しかしながら、

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

完璧に動作します。

お役に立てば幸いです。


+1。これにより、カラットが環境変数に残ることに注意してください。つまり、に設定さpwdabc^&123ます。ほとんどの場合、これはおそらくまさにあなたがする必要があることですが、何が起こっているのかを知らなければ、それがあなたを捕まえるかもしれません。
ハリージョンストン

@HarryJohnstonスペルミスを修正する必要があります。それはcarEtです。ところで、ntcmds.chmが言及していることは知っていますが、cmd /?ドキュメントは、キャレットがエスケープ文字であることについて言及されていますか?
barlop 2013年

@Barlop:そうです。同音異義語と混同していた。原則として、/?包括的なドキュメントではなく概要のみを提供します。
ハリージョンストン

@barlop 、? キャレットはエスケープ文字です。
Pacerier、2015

@Pacerierはい、キャレットはエスケープ文字です。これに異論を唱える人はいません。ntcmds.chm(ntcmds.chmはXPに付属していて、同等のオンラインmicrosoft.com/resources/documentation/windows/xp/all/proddocs/…に あり、おそらくいくつかの方法で、エスケープ文字であると述べられています。オンラインの最新情報-多分より多くのコマンド)。私はちょうど/のどこにいるか尋ねました (どこかにある場合)、それはキャレットがエスケープ文字であると言います
barlop

7

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

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

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


と引用符内の引用?
Pacerier、2015

4

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

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"ますが、出力には引用符文字も含まれます。つまり、引用符を使用することは、適切な解決策とは言えません。

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

echo abc^&123

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

set pwd=abc^^^&123

キャレットを脱出する必要性を指摘するための+1
jmcg

素晴らしい作品、ありがとうございます。このエスケープ文字は、何らかの理由でドキュメントに記載されていないdocs.microsoft.com/en-us/windows-server/administration/...
セルゲイSmolnikovを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.