回答:
^
キャレットとそれに続く改行が完全に削除されていることを覚えている限り、キャレットで長い行を分割できます。したがって、改行するスペースがある場合は、スペースを含めます。(詳細は以下をご覧ください。)
例:
copy file1.txt file2.txt
次のように書きます:
copy file1.txt^
file2.txt
echo
編集時に合計2つの改行を作成できます。
co^␍py ^␍file1 ^␍file2
ます。混乱を避けるために、コメントを削除することをお勧めします。特に、この質問は非常に人気があるため
キャレットのルールは次のとおりです。
行末のキャレットは次の行を追加し、追加された行の最初の文字はエスケープされます。
キャレットは複数回使用できますが、行全体は最大行長の8192文字を超えてはなりません(Windows XP、Windows Vista、およびWindows 7)。
echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*
echo Test2
echo one & echo two
--- Output ---
Test2
one
two
echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two
echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two
次の文字のエスケープを抑制するには、リダイレクトを使用できます。
リダイレクトはキャレットの直前でなければなりません。しかし、キャレットの前にリダイレクトする好奇心が1つあります。
トークンをキャレットに置くと、トークンは削除されます。
echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
また、文字列に改行を埋め込むこともできます。
setlocal EnableDelayedExpansion
set text=This creates ^
a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed
空行は成功のために重要です。これは遅延拡張でのみ機能します。それ以外の場合、ラインフィード後の行の残りは無視されます。
行末のキャレットは次の文字もラインフィードであっても、次のラインフィードを無視して次の文字をエスケープするため、機能します(このフェーズでは、キャリッジリターンは常に無視されます)。
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
機能しません!スペースを追加する必要がありました:copy ^[newline] "file1.txt" ^[newline] "file2.txt"
。
(これは基本的にウェインの回答を書き直したものですが、キャレットの周りの混乱が解消されたため、CWとして投稿しました。回答の編集には恥ずかしがりませんが、完全に書き直すことは不適切のようです。)
長い行はキャレット(^
)で分割できます。キャレットとそれに続く改行はコマンドから完全に削除されるので、スペースが必要な場所(パラメーター間など)に配置する場合は、スペースも含めます(の前^
、または次の行の先頭のいずれか—後者の選択は、それが継続であることを明確にするのに役立つ場合があります)。
例:(すべてWindows XPおよびWindows 7でテスト済み)
xcopy file1.txt file2.txt
次のように書くことができます:
xcopy^
file1.txt^
file2.txt
または
xcopy ^
file1.txt ^
file2.txt
あるいは
xc^
opy ^
file1.txt ^
file2.txt
(betwenスペースがないので、最後に動作していることxc
と、^
あなたが削除すると、次の行の先頭にスペースなしで。^
と改行を、あなたが得ます... xcopy
。)
読みやすさと健全性のために、おそらくパラメーター間でのみ分割するのが最善です(必ずスペースを含めてください)。
複数のコマンドを括弧で囲み、多数の行にまたがることができます。ので、次のようecho hi && echo hello
に置くことができます:
( echo hi
echo hello )
変数も役立ちます:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...
また、キャレット(^
)を使用してif
、スペースが存在する場合にのみコンディショナルが従うことを好むことに気付きました。
if exist ^
cmd1.bat && cmd2.bat
は、括弧の形式とは異なります:正常に実行されたcmd2.bat
iffをcmd1.bat
実行します(-settingなし%errorcode%
)。後者の形式は無条件に実行されます。(少なくとも私にとっては)やや予期しないことは、明らかに、両方の組み合わせを使用できないこと&&
です。つまり、改行の前に追加します。
( echo <line break here> hello )
空行になります。
ただし、forループの値の途中で分割する場合、キャレットは必要ないようです(実際にキャレットを使用しようとすると、構文エラーと見なされます)。例えば、
for %n in (hello
bye) do echo %n
こんにちはの後やさようならの前にスペースは必要ないことに注意してください。
for
構文の一部です。「for-set」の要素の区切り文字は、スペース、コンマ、セミコロン、等号、TAB文字、および改行です。
do
パーツに複数の/ネストされたif-else
ステートメントが含まれている場合はどうなりますか?
^
コマンドテキストの前後にスペースを追加すると、スペースなしで次の行を開始できます。