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 ^^^&