2011-06-29 10 views
7

トリッキーなビット。バッチファイルで次のように正しくエスケープするにはどうすればよいですか?バッチファイルをエスケープするスラッシュと疑問符で始まるエコー

echo /? display this help text 

この特定の文字の組み合わせは、「ECHO /?」として扱われます。コマンド:

C:\Batch>ECHO  /? display this help text 
Displays messages, or turns command-echoing on or off. 

    ECHO [ON | OFF] 
    ECHO [message] 

Type ECHO without parameters to display the current echo setting. 

キャレット(^)エスケープには反応しません。私は試しました^ /?/^?および/または?

NB:回避策として、私は例えば、間に他の文字を挿入すると、ECHOコマンド行プロセッサーをバイパスするのに十分であることが判明:

echo ... /? display this help text 

それでも、これは理想的ではないとあった場合、私は疑問に思いました希望の出力を達成するには、つまり/?エコーされたメッセージの始めに。エコーの引数をエスケープするために

答えて

5

、あなたは別の構文echo.使用することができます。echo引数をエスケープするために

echo./? 
+0

ありがとうございました!それはうまくいき、スペースで埋めることさえできます。 – Mykro

+0

'echo.'は常にディスクにアクセスし、' echo。\ .. \ mybat.bat'(mybat.batがカレントディレクトリにある場合)の出力で失敗します。 – jeb

+0

@Jeb:非常に面白いです。 –

5

echo.echo:echo=
のように、多くの変形が存在しますが、唯一のecho(は、任意の追加に対して安全であるように思われますテキスト。

これらの一つは、失敗したファイルは、カレントディレクトリ内のファイルが

echo\..\my.bat 
echo:\..\my.bat 
echo.\..\my.bat

これらmy.bat命名存在する場合、これらのいずれかが、失敗しechoecho[echo]またはecho+

echo. 
echo[ 
echo] 
echo+

のように存在している場合1つはファイルの独立したものに失敗する

echo/? 
echo,/? 
echo;/?

echo(のみがどのコンテンツに対しても常に安全であるようです。

+0

また 'echo ='もあります。これは '/? 'で壊れることもあります。 –

+0

これらのバリアントはどこに文書化されていますか?または、なぜ彼らは可能ですか?これはすべてバグのように見えます。 – utapyngo

+2

@utapyngo cmd.exeは、12のサルのランダムな結果です。ドキュメントはありません、それは単純にテストです(多くのテスト) – jeb

関連する問題