Programming Field

^ (ハット記号) - DOS コマンド一覧

スポンサーリンク

[Windows NT系] 直後に来る特殊文字を通常の文字と見なすために用います。また、コマンドを複数行に分けて記述するときにも使います。

解説

ハット記号(サーカムフレックス; カレットとも)「^」は、ダブルクオーテーション記号「"」やパイプやリダイレクションに使う記号(「|」「<」など)を通常の文字として扱いたい場合に用います。例えば

echo A -^> B

と実行すると、画面に「A -> B」が表示されます。これを、

echo A -> B

と「^」を指定しないで実行すると、「>」がリダイレクション「>」と見なされ、「A -」(と改行文字)がファイル B に出力されてしまいます。

また、コマンドラインを「^」文字で終わらせると次の行の文字列もコマンドラインの続きと見なされます。例えば、

echo Hello, ^
  world

と記述すると、

Hello,   world

と出力されます。コマンドプロンプト上で「^」文字の直後に改行を入力した場合は、「More?」というプロンプトとともに続きのコマンドラインの入力が求められます。

※ 「^」文字の直後が改行になる場合のみ、(「^」の効果はそのままに)その改行文字(改行1つ分)は無いものと見なされます。「^」文字の直後が改行文字以外の場合はその文字が通常の文字として有効になります(「^|」は「|」、「^T」は「T」と見なされます)。「^」直後の改行のみが無視されますが、その場合でも「^」の効果は残り続けるため、改行を2連続で行った場合は2つ目の改行文字がコマンドの末尾とはならず(「^<改行>」と見なされ通常の文字扱いになる)、直後の行も同じ行の処理として扱われます。またその影響で、「^」によって改行文字1つ分を無いものとした場合は、その直後の行頭にある文字がどんな文字であっても強制的に通常文字扱いになります。

「" "」の中に含まれる「^」文字は効果がないものとして扱われます。そのため、

echo "Test ^
Test"

としても1行目だけでEcho文が完結するものとみなされ、2行目の「Test"」を続けて実行しようとします。

※ この性質と「^」文字直後の改行は無いものとみなされる性質から、以下の例の1つ目は2行目の「^」が通常文字扱い(2行目先頭の「"」が「^」によって通常文字扱い)になり、3行目が独立したコマンドとなります。これを回避するには、例の2つ目のように2行目(および3行目)の先頭にスペースを入れるなどします。

rem 以下は2行目でコマンドが完結してしまう
execute "Strawberry" ^
"Mallow" ^
"Orchid"

rem 以下は3行目まで1つのコマンドとして扱われる
execute "Strawberry" ^
  "Mallow" ^
  "Orchid"

なお、単純に「^」を通常の文字として使いたい場合は「^^」と2文字連続で記述します。

※ 以下の例は2行目で打ち切られます(2行目行頭の「^」が1行目末尾の「^」によって通常文字扱いされるため)。打ち切られないようにするには2~4行目の行頭にスペース文字を入れるなどします。

hoge ^
^
^
^
piyo

サンプル1

foo.exe -f file1.txt ^
        -f file2.txt ^
        -f file3.txt ^
        -f file4.txt

「foo.exe」に長い引数を渡すために、「^」文字を使って複数行に分けて引数を記述しています。ただしこの場合、「^」文字の直前のスペースと、2行目以降にある最初の8文字のスペースも引数の一部と見なされています。

サンプル2

set MYVAR=One^

Two^

Three

「^」直後の改行は1つだけ無視して扱われ、その次の改行文字は(「^」の効果によって)通常の文字扱いになるという性質を用い、Setコマンドで環境変数に改行文字を含む値をセットしています。このコマンドを実行すると「MYVAR」という環境変数に「One(改行)Two(改行)Three」という値がセットされます。

※ 「^」によって改行文字を通常文字として扱った場合、その改行文字は文字コード10(0x0A; LF)の文字として扱われます(バッチファイルがCR-LFの改行文字を用いていてもCRは含まれません)。

サンプル3 (バッチファイル)

if not exist "E:\Foo\Bar\Piyo File.txt" (
    echo Error. ^(File not found.^)
    exit /b 1
)

括弧「( )」でコマンドを囲んだ際に括弧文字を通常の文字として扱うために「^」を使用しています。(この場合は、「^(」は「^」が無くても特に問題は無いですが「^)」は「^」が無いと意図しない動作が起きてしまいます。)