batch-file
特殊文字をエスケープする
サーチ…
前書き
すべてのcmd.exeおよびDOSバージョンでは、特定の用途(コマンドのリダイレクトなど)のために一部の文字が予約されています。このトピックでは、問題なく特殊文字を使用する方法について説明します。
キャレットを使用したエスケープ(^)
ほとんどの特殊文字は、キャレット( ^ )を使用してエスケープできます。次の例を見てください。
echo > Hi
echo ^> Hi
>は出力をファイルにリダイレクトする特殊文字であるため、この最初のコマンドは> Hi出力しません。この場合、ファイル名は「Hi」となります。
しかし、2番目のコマンドでは、キャレット( ^ )は>に「ファイルへの出力先のリダイレクト」コマンドとしての機能を停止するように指示するため、 > Hiは問題なしで出力されます。 >は通常の文字です。
エスケープできる特殊文字のリスト(Rob van der Woudeのページから取得、編集)
| キャラクター | エスケープ結果 | 備考 |
|---|---|---|
| ^ | ^^ | |
| そして、 | ^& | |
| < | ^ < | |
| > | ^> | |
| | | ^ | | |
| \ | ^ \ | |
| ! | ^^! | DelayedExpansionがオンの場合のみ必要 |
キャレットをエスケープする
キャレットは、他のキャレットをエスケープするまでスタックすることができます。次の例を参考にしてください。
| 入力 | 出力 |
|---|---|
| ^& | そして、 |
| ^ ^ ^& | ^& |
| ^ ^ ^ ^ ^& | ^^& |
注意:太字のキャレットはエスケープされています。
セキュリティの問題
ここで少し話題になりますが、これは非常に重要です!ファイルの末尾に不要なキャレットエスケープがあると、メモリリークが発生する可能性があります。
any-invalid-command-you-like-here ^
このコマンドはすべてのメモリをリークし、システムを完全に使用不可能にします!詳細はこちらを参照してください。
FINDとFINDSTRの特殊文字
findとfindstrにはいくつかの特殊文字があり、注意が必要です。
見つけた
-エスケープ必要がある唯一の1文字があります"引用符をエスケープするには、単にその隣に別の引用符を追加だから。 "となり"" 。ものすごく単純。
FINDSTR
Findstrはたくさんの文字が含まれていますので、非常に注意してください。 \を使うと、特殊文字をエスケープできます。エスケープする特殊文字のリストです
| キャラクター | エスケープ結果 |
|---|---|
| \ | \\ |
| [ | \ [ |
| ] | \] |
| " | \ " |
| 。 | \。 |
| * | \ * |
| ? | \? |
FOR / F特殊文字
FOR / F
FOR /F文では、いくつかの文字がエスケープする必要があります。ここではリスト(Rob van der Woudeのページから取って編集)
| キャラクター | エスケープ結果 | 備考 |
|---|---|---|
| ' | ^ ' | usebackqが指定されていない限り、 FOR /Fの括弧でのみ必要です。 |
| ` | ^ ` | usebackqが指定されている場合、 FOR /Fの括弧でのみ必要です。 |
| 、 | ^、 | ┒ |
| ; | ^; | ┃ |
| = | ^ = | ┣FOR FOR /Fの括弧で二重引用符で囲んでもエスケープする必要があります |
| ( | ^( | ┃ |
| ) | ^) | ┙ |
余分な特殊文字
ここに、エスケープする必要がある/必要とするかもしれないが、上で言及していない他の特殊文字のリストがあります。
| キャラクター | エスケープ結果 | 備考 |
|---|---|---|
| % | %% | |
| [LF] | ^ [LF] | このトリックは、 alt.msdos.batchニュースグループのMark Stangによってalt.msdos.batchれています。 |
パイプラインを脱出する
パイプ付きの式がある場合、 cmdはパイプの両側に2つのスレッドを開始し、式はパイプの両側で2回解析されるので、キャレットを2倍にする必要があります。
左側に:
echo ^^^&|more
右側に:
break|echo ^^^&