728

バッチ ファイルの出力からどのように改行を挿入できますか?

私は次のようなことをしたい:

echo hello\nworld

どちらが出力されますか:

hello
world
4

23 に答える 23

635

使用する:

echo hello
echo:
echo world
于 2008-09-25T11:51:10.570 に答える
514

echo hello & echo.world

& echo.これは、 newline の定数として定義できることを意味します\n

于 2008-09-25T11:52:13.127 に答える
150

では、以下を含む .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 ステートメント間のコードのみが必要です。

于 2008-11-06T18:43:45.197 に答える
108

cmd/bat-files には、空白行を書き込む標準機能がありecho:、cmd-output で新しい行をエミュレートします。

@echo off
echo line1
echo:
echo line2

また

@echo line1 & echo: & echo line2

上記のコマンド ファイルの出力:

line1

line2
于 2010-06-26T08:11:06.430 に答える
77

ケンの答えのようですが、遅延拡張を使用しています。

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:

于 2011-06-16T23:52:05.353 に答える
20

何かをエコーし​​てファイルにリダイレクトする場合、複数のエコー コマンドは機能しません。多分 ">>" リダイレクタが良い選択だと思います:

エコーハロー > 温度
エコーワールド >> 温度
于 2009-08-09T01:00:23.033 に答える
14

Grimtron が示唆するように、これを定義する簡単な例を次に示します。

@echo off
set newline=^& echo.
echo hello %newline%world

出力

C:\>test.bat
hello
world
于 2010-03-05T16:47:45.737 に答える
9

このようにすることもできます。

(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)
于 2011-09-20T17:06:29.143 に答える
3

Ken と Jeb のソリューションはうまく機能します。

しかし、新しい行は LF 文字のみで生成され、CRLF 文字が必要です (Windows バージョン)。

これに対して、スクリプトの最後で、LF を CRLF に変換しました。

例:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
于 2016-09-30T15:24:49.650 に答える
2

バッチで新しい行を開始するには、次のように「echo[」を追加するだけです。

echo Hi!
echo[
echo Hello!
于 2016-12-16T20:31:49.090 に答える
2

コンソールの仮想端末シーケンス、カーソルの配置に従ってカーソルの配置を使用するすべてのソリューションに注意してください。

順序 コード 説明 行動
ESC [ <n> E CNL カーソル次の行 現在の位置から <n> 行下にカーソル

コンソール ウィンドウの最下部に達していない場合にのみ機能します。

下部にはカーソルを下に移動するスペースが残っていないため、カーソルは左に移動し ( CRof をCRLF使用)、前に印刷された行は最初から上書きされます。

于 2021-11-26T03:44:03.427 に答える
1

これは私にとってはうまくいきました。遅延拡張は必要ありません:

@echo off
(
echo ^<html^> 
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause

次のような出力を書き込みます。

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
于 2010-06-02T15:35:47.180 に答える
0

@echo( @echo + [space] + [insecable space] )を使用できます

注: 切り離せないスペースは Alt+0160 で取得できます

それが役に立てば幸い :)

[編集] うーん、その通りです。Makefile で必要でした。そこでは完全に動作します。私の答えはバッチファイルに適応していないと思います...私の悪い。

于 2013-07-18T13:22:07.423 に答える