改行を含んだ文字列を Echo するには、改行をサーカムフレックスで「^」でエスケープすればよくて、
- Command Prompt
C:\>echo. Some string including^ More? More? newline. Some string including newline. C:\>
Set コマンドもうまくいく。
- Command Prompt
C:\>Set STR=Some string including^ More? More? newline. C:\>Set STR STR=Some string including newline. C:\>
でも、Set した変数を Echo すると……
- Command Prompt
C:\>Echo.%STR% Some string including C:\>
1行目しか表示されない。遅延評価じゃないから 1行目しか表示されないのは分かるけど、2行目の newline. がエラーにならないので、デバッグしにくい。
対処
バッチファイルなら遅延評価(!変数!)が使えるけれど……
- Command Prompt
C:\>type newline.cmd @Echo Off Set STR=Some string including^ newline. Setlocal ENABLEDELAYEDEXPANSION Echo.!STR! Endlocal C:\>newline.cmd Some string including newline. C:\>
……コマンドプロンプトでは Setlocal が使えない。
とりあえず 1行目に余分な改行を追加して、使うとき More +1 で 1行目を削除でしのぐ。
- Command Prompt
C:\>Set STR=^ More? More? Some string including^ More? More? newline. C:\>Set STR | More +1 Some string including newline. C:\>