バッチ ファイルの出力からどのように改行を挿入できますか?
私は次のようなことをしたい:
echo hello\nworld
どちらが出力されますか:
hello
world
バッチ ファイルの出力からどのように改行を挿入できますか?
私は次のようなことをしたい:
echo hello\nworld
どちらが出力されますか:
hello
world
使用する:
echo hello
echo:
echo world
echo hello & echo.world
& echo.
これは、 newline の定数として定義できることを意味します\n
。
では、以下を含む .bat ファイルを作成します。
@echo off
REM Creating a Newline variable (the two blank lines are required!)
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
REM Example Usage:
echo There should be a newline%NL%inserted here.
echo.
pause
次のような出力が表示されます。
There should be a newline
inserted here.
Press any key to continue . . .
明らかに、REM ステートメント間のコードのみが必要です。
cmd/bat-files には、空白行を書き込む標準機能がありecho:
、cmd-output で新しい行をエミュレートします。
@echo off
echo line1
echo:
echo line2
また
@echo line1 & echo: & echo line2
上記のコマンド ファイルの出力:
line1
line2
ケンの答えのようですが、遅延拡張を使用しています。
setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)
echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"
最初に、単一の改行文字が作成され、\n変数に割り当てられます。
これは、行末のカレットが次の文字をエスケープしようとするときに機能しますが、これが改行の場合は無視され、次の文字が読み取られてエスケープされます(これが改行でもある場合でも)。
次に、現在の命令を終了するために3番目の改行が必要です。そうでない場合、3番目の行がLF変数に追加されます。
バッチファイルの行末がCR/LFである場合でも、パーサーのこのフェーズでCRが削除されるため、LFのみが重要です。
遅延拡張を使用する利点は、特殊文字の処理がまったくないことです。
echo Line1%LF%Line2
パーサーが単一の改行で解析を停止するため、失敗します。
詳細については、
SO:Vista / DOSバッチ(.bat)ファイルの複数行に分割された長いコマンドを参照してください。SO
:Windowsコマンドインタープリター(CMD.EXE)はスクリプトをどのように解析しますか?
編集:避けるecho.
echo
質問は複数の行を出力できる単一に関するものだったので、これは質問に答えません。
しかし、新しい行を作成するための使用を提案する他の回答にもかかわらず、cmd.exeが名前の付いたファイルを検索して開始しようと するため、非常に遅く、完全に失敗する可能性があるため、これは最悪でecho.
あることに注意してください。echo.
ECHO
空の行だけを印刷するには、次のいずれかを使用できます。
echo,
echo;
echo(
echo/
echo+
echo=
ただし、ネットワークドライブのように、スクリプトが実行される場所によっては非常に遅くなる可能性があるため、の使用は避ける必要がありecho.
ますecho\
。echo:
何かをエコーしてファイルにリダイレクトする場合、複数のエコー コマンドは機能しません。多分 ">>" リダイレクタが良い選択だと思います:
エコーハロー > 温度 エコーワールド >> 温度
Grimtron が示唆するように、これを定義する簡単な例を次に示します。
@echo off
set newline=^& echo.
echo hello %newline%world
C:\>test.bat
hello
world
このようにすることもできます。
(for %i in (a b "c d") do @echo %~i)
出力は次のようになります。
a
b
c d
これをバッチファイルに入れると、「%」が 2 倍になることに注意してください。
(for %%i in (a b "c d") do @echo %%~i)
Ken と Jeb のソリューションはうまく機能します。
しかし、新しい行は LF 文字のみで生成され、CRLF 文字が必要です (Windows バージョン)。
これに対して、スクリプトの最後で、LF を CRLF に変換しました。
例:
TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
バッチで新しい行を開始するには、次のように「echo[」を追加するだけです。
echo Hi!
echo[
echo Hello!
コンソールの仮想端末シーケンス、カーソルの配置に従ってカーソルの配置を使用するすべてのソリューションに注意してください。
順序 | コード | 説明 | 行動 |
---|---|---|---|
ESC [ <n> E | CNL | カーソル次の行 | 現在の位置から <n> 行下にカーソル |
コンソール ウィンドウの最下部に達していない場合にのみ機能します。
下部にはカーソルを下に移動するスペースが残っていないため、カーソルは左に移動し ( CR
of をCRLF
使用)、前に印刷された行は最初から上書きされます。
これは私にとってはうまくいきました。遅延拡張は必要ありません:
@echo off
(
echo ^<html^>
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause
次のような出力を書き込みます。
<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
@echo
( @echo + [space] + [insecable space] )を使用できます
注: 切り離せないスペースは Alt+0160 で取得できます
それが役に立てば幸い :)
[編集] うーん、その通りです。Makefile で必要でした。そこでは完全に動作します。私の答えはバッチファイルに適応していないと思います...私の悪い。