배치 파일에서 줄 바꿈을 어떻게 에코합니까?


642

배치 파일 출력에서 ​​줄 바꿈을 어떻게 삽입 할 수 있습니까?

나는 다음과 같은 것을하고 싶다 :

echo hello\nworld

다음과 같이 출력됩니다.

hello
world

6
나에게 유용했다. 나는 에코를해야했다 \ n \ n | 스크립트의 my_app.exe 나는 (에코 & & 에코.) | my_app.exe
Vignesh

2
쉬운 접근 "코드 시작 :"> echo hello & echo world, U에게 필요한 것을 줄 것입니다
prudviraj

1
보이지 않는 ascii chr (255)를 별도의 줄에 삽입하여 빈 줄을 새로 만들 수 있습니다. [alt] 키를 누른 채 키패드에서 255를 누릅니다. 빈칸 인 chr (255)를 삽입합니다. " echo (alt + 255) "querty 키보드 상단의 숫자가 아닌 키패드 만 사용할 수 있습니다!
jwzumwalt

컴퓨터 수리의 절반이 플러그를 꽂고 켜는 것처럼 소프트웨어 개발의 절반은 우주 공학 이라고 합니다 . 우리는 필요 그냥 그렇게 우리의 빈 라인을.
Bob Stein

이건 어때요 ? echo Yes&echo No
scientist_7

답변:


462

echo hello & echo.world

& echo., 개행에 대한 상수로 정의 할 수 \n있습니다.


43
이 예는 기간이 필요하지 않습니다,하지만 당신은 빈 빈 라인 반향 필요 하나를 수행합니다echo. && echo hello && echo. && echo world
매트 윌키

4
단일 반향으로이 작업을 수행하여 파일로 리디렉션 할 수 있습니까?
Shahbaz

46
@Shahbaz -$ (echo Hello && echo World) > ./File.txt
나단 JB

25
「에코」의 시대. 절대로 나를 놀라게하지 않습니다. 너무 오래되었지만 여전히 점은 공백없이 명령 이름과 엄격하게 연결되어야한다는 것을 잊어 버렸습니다. 귀하의 게시물에는 오류가 없습니다. 나는 이것을 "echo"라고 상기시켜줍니다. ! = "에코." !
quetzalcoatl

5
@quetzalcoatl, 그것은 심지어 낯선 사람을 얻는다. 도트 이외의 다른 문자도 작동합니다. SS64는 더 나은 구문은 echo(성능 향상을위한 것이라고 말합니다 (여전히 공간을 고려하지 않아도 됨). ECHO
못함

558

사용하다:

echo hello
echo.
echo world

16
단일 echo 문 내에 문자열을 제공하는 동안 가능합니까?
브라이언 알 본디

5
단일 echo 문으로 왜해야합니까? 다른 것을 갖는 데있어 어떤 해가 있습니까?
Rob

3
@Rob, 나는이 문제를 만났으며 아무런 작업도하지 않았습니다. 내 예제에서 단일 문장으로 에코해야합니다. 나는 HTML에서 일부 TEX 파일을 생성하고 사용하여 Makefile을 생성하고 echo "Makefile contents (which has \n)" > Makefile, 여러 에코로 그것은 것없는 일
Shahbaz

3
& (또는 &&)를 사용하여 단일 명령문으로 수행하십시오. 예를 들어, "hello \ nworld"를 txt 파일에 넣으려면 :(echo hello & echo world) >> ./test.txt
Ned Martin

4
파일에 여러 줄로 출력하려면 다음을 수행하지 않는 이유는 무엇입니까? echo line 1 > Makefile다음 echo line 2 >> Makefile. 를 사용 >>하면 출력이 파일에 추가되므로이 경우에 필요한 동작입니다.
dgnuff

141

여기에 다음을 포함하는 .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 문 사이에 코드 만 있으면됩니다.


51
라인 세트 NL = ^^^ % NLM %% NLM % ^ % NLM %% NLM %의 작동 방식을 설명하는 데 시간이 걸리나요? 나는 확실히 내 머리 내내 그것을 얻을 수 없다
앤디 모리스

8
@andy methinks +8 코멘트는 질문을 보증합니다 : stackoverflow.com/questions/6379619/…
matt wilkie

82
이것은 cmd.exe 및 Windows 배치 파일이 완전히 미쳤다는 것을 보여주는 훌륭한 예입니다!
mivk

12
SELF에 대한 정보 : 라인 "설정 NLM = ^은" 해야한다 캐럿 후 아무것도하고 있어야 그 후 2 빈 줄이있다.
mnemotronic

4
더 간단한 방법은 내 대답을 참조하십시오. set nl=^&echo.그런 다음 echo hello %nl% world동일한 효과를냅니다.
coltonon

96

echo:cmd / bat-files에는 빈 줄을 쓰는 표준 기능이 있으며, cmd-output에서 새 줄을 에뮬레이트합니다.

@echo off
@echo line1
@echo:
@echo line2

위의 cmd 파일에서 인용 한 결과 :

line1

line2

37
실제로 사용되지 않은 특수 문자가 작동해야합니다. 슬래시는 명령 옵션의 표준 문자이므로 항상 /를 사용하는 것이 좋습니다. 또한 나는 항상 Microsoft의 누군가가 불행히도 선택하는 점의 사용을 비판합니다. echo.com 명령은 MS-DOS / Windows Batch 명령 프로세서의 버전에 따라 다른 결과를 제공하기 때문입니다.
Aacini

21
항상 작동하는 유일한 버전은입니다 echo(. 문제가 발생할 수 있지만 실제로는 완벽하게 작동합니다. 다른 모든 양식에는 명령이 원하는대로 수행되지 않는 상황이 하나 이상 있습니다.
dbenham 2016 년

5
@naxa-몇몇 공식적인 해커가 아닌 배치 해커가 수집 한 집단 지식. 목표는 아무것도 포함하지 않고 모든 값을 ECHO하는 데 사용할 수있는 구문을 사용하는 것으로 예상되는 것 이외의 것을 얻는 것에 대해 걱정할 필요가 없습니다. 내가 아는 가장 좋은 요약은 dostips.com/forum/viewtopic.php?p=4554#p4554 입니다. 그것은 당신을 교수형으로 남겨두고 있지만 아무도 ECHO(실패 하는 시나리오를 생각해 낸 적이 없습니다 .
dbenham

2
@Pacerier-각 제안에 대한 실패의 예가 있습니다. dostips.com/forum/viewtopic.php?p=4554#p4554를주의 깊게 읽으 십시오 .
dbenham

2
@Pacerier 독립형 질문에 대한 에코 가 충분 합니다. 아마도 "어떤 캐릭터가 즉시 따라 올 수 있으며 echo, 그 효과는 무엇입니까?"
매트 윌키

68

Ken의 답변과 같지만 지연된 확장을 사용합니다.

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

먼저 단일 줄 바꿈 문자가 만들어지고 \ n- 변수에 할당됩니다.
이것은 줄 끝의 캐럿이 다음 문자를 이스케이프하려고 시도하는 것처럼 작동하지만 이것이 줄 바꿈 인 경우 무시되고 다음 문자를 읽고 이스케이프합니다 (줄 바꿈이더라도).
그런 다음 현재 명령어를 끝내려면 세 번째 줄 바꿈이 필요합니다. 그렇지 않으면 세 번째 줄이 LF 변수에 추가됩니다.
배치 파일조차도 CR / LF로 줄 끝이 있지만 파서의이 단계에서 CR이 제거되므로 LF 만 중요합니다.

지연 확장을 사용하면 특별한 문자 처리가 전혀 없다는 장점이 있습니다.
echo Line1%LF%Line2파서는 단일 줄 바꿈에서 구문 분석을 중지하므로 실패합니다.

자세한 설명은
SO : Long 명령이 Vista / DOS 배치 (.bat) 파일에서 여러 줄로 나뉩니다
. SO : CMD.EXE (Windows Command Interpreter)는 스크립트를 어떻게 구문 분석합니까?

편집 : 피하십시오 echo.

echo여러 줄을 출력 할 수있는 단일 질문에 관한 것이기 때문에 질문에 대답하지 않습니다 .

그러나 echo.새 줄을 만드는 사용을 제안하는 다른 대답에도 불구하고 echo.cmd.exe가 이름이 지정된 파일을 검색 ECHO하여 시작하려고 시도하면 매우 느리고 완전히 실패 할 수 있으므로 최악의 상황 입니다.

빈 줄만 인쇄하려면 다음 중 하나를 사용할 수 있습니다.

echo,
echo;
echo(
echo/
echo+
echo=

그러나의 사용 echo., echo\또는 echo:그들이 정말로 느릴 수있는 스크립트가 네트워크 드라이브처럼 실행됩니다 위치 따라 피해야한다.


1
예를 들어 call :pause line1!\n!line2, 개행 문자가있는 문자열을 배치 서브 루틴에 매개 변수로 전달하는 경우 서브 루틴으로 시작 setlocal EnableDelayedExpansion하고 종료 setlocal DisableDelayedExpansion하여 개행이 조기에 해석되지 않도록하십시오.
stevek_mcc

2
문자의 캐스팅에 대한 +1 echo, echo; echo( echo/ echo+ echo=과 도적 갤러리 echo. echo\ echo:. 이 일이 왜 성스러운 지 설명해야한다면, 나는 당신에게 무료 맥주를 빚을 것입니다.
Bob Stein

40

echo. 충분했다.

한 줄에 필요한 경우을 사용하십시오 &. 예를 들어

echo Line 1 & echo. & echo line 3

다음과 같이 출력됩니다 :

Line 1

line 3

이제 조금 더 멋진 것을 원한다고 가정 해 봅시다. ...

set n=^&echo.
echo hello %n% world

출력

hello
world

그런 다음 %n%echo 문에서 새 줄을 원할 때 마다을 던지십시오 . 이것은 \n다양한 언어로 사용되는 것에 더 가깝습니다 .

고장

set n=변수 n를 다음과 같게 설정합니다 .

^ 다음 기호를 무시합니다.

&같은 줄에서 다른 명령을 수행하는 것을 의미합니다. 우리는 errorlevel (큰 소리로 울기위한 echo 문)을 신경 쓰지 않기 때문에 &&필요 하지 않습니다.

echo. echo 문을 계속합니다.

실제로 코드 인 변수를 만들고 다른 명령 내에서 사용할 수 있기 때문에이 모든 것이 작동합니다. 배치는 쉘 스크립트 언어의 최첨단이 아니기 때문에 일종의 빈민가 함수와 같습니다. 이것은 int, char, float, string 등을 자연스럽게 지정하지 않고 배치의 변수 사용이 좋지 않기 때문에 작동합니다.

교묘 한 사람이라면 다른 것들과 함께 사용할 수 있습니다. 예를 들어, 탭을 사용하여 에코

set t=^&echo.     ::there are spaces up to the double colon

7
echo.먼저 해당 이름으로 파일을 찾으려고하므로 사용 하지 마십시오 . 다음과 같은 다른 문장 부호를 사용하십시오.echo,
Reinstate Monica

20

파일로 리디렉션 할 무언가를 반향 할 때 여러 반향 명령이 작동하지 않습니다. 아마도 ">>"리디렉터가 좋은 선택이라고 생각합니다.

에코 안녕하세요> 온도
에코 세계 >> 온도

8
첫 번째 예는 ">"를 사용하여 새 파일을 생성하고 두 번째 예는 ">>"를 사용하여 기존 파일에 추가하거나 존재하지 않는 경우 파일을 생성합니다.
Yann Duran

1
(echo hello && echo world) > tempNathan J. Brauer가 (현재) 허용되는 답변에 대한 의견에서 언급했습니다.
GeroldBroser가 Monica

15

Grimtron이 제안한 것처럼이를 정의하는 간단한 예는 다음과 같습니다.

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

산출

C:\>test.bat
hello
world

실제로 "세계"이후에 줄 바꿈이 추가 될 것입니다.
BlueRaja-Danny Pflughoeft

1
@blue 후행 줄 바꿈은 배치 파일 자체의 기능 인 것 같습니다. echo hello %newline%world줄 을 반복하면 사이에 공백이 없습니다.
matt wilkie

2
echo "Hello %newline% world"따옴표 안에 있으므로 실패합니다. 실제 줄 바꿈 이 아니기 때문입니다 .
jeb

14

결과를 파일에 넣어야 할 경우

(echo a & echo. & echo b) > file_containing_multiple_lines.txt

9

당신은 또한 이렇게 할 수 있습니다

(for %i in (a b "c d") do @echo %~i)

출력은

a
b
c d

이것을 배치 파일에 넣으면 '%'가 두 배가됩니다.

(for %%i in (a b "c d") do @echo %%~i)

이 솔루션은 줄 바꿈 대신 앰퍼샌드 &를 에코하려는 경우에도 작동합니다.
parvus

버그를 발견 한 것 같습니다 : *char

7

MINGW make makefile에서 빈 줄을 에코하려고해서 여기에 오는 사람이 있다면

@cmd /c echo.

단순히 사용 echo.하는 것이 두려운 원인process_begin: CreateProcess(NULL, echo., ...) failed. 오류 메시지가 나타납니다.

나는 이것이 적어도 다른 사람에게 도움이되기를 바랍니다 :)


그러나 그것은 질문이 아닙니다. 공감!
Mesalcode

풍자인지 아닌지 확실하지 않음 : P
Wayne Uroda

받은 편지함에서 찾아보세요. : D
Mesalcode

3

변수에 전달할 수있는 문자열 리터럴에서 유명한 \ n을 사용해야하는 경우 아래 Hello.bat 스크립트 와 같은 코드를 작성할 수 있습니다.

@echo off
set input=%1
if defined input (
    set answer=Hi!\nWhy did you call me a %input%?
) else (
    set answer=Hi!\nHow are you?\nWe are friends, you know?\nYou can call me by name.
)

setlocal enableDelayedExpansion
set newline=^


rem Two empty lines above are essential
echo %answer:\n=!newline!%

이 방법으로 여러 줄 출력을 한 곳에서, 심지어 다른 스크립트 나 외부 파일로 준비하여 다른 곳에서 인쇄 할 수 있습니다.

줄 바꿈은 개행 변수 로 유지됩니다 . 이 값은 교체해야 에코 라인은 내가 사용 있도록 확장 SETLOCAL enableDelayedExpansion을 실행에 변수를 확장 느낌표 표시를 가능하게 할 수 있습니다. 그리고 실행은 \ n줄 바꿈 내용으로 대체 합니다 ( help set 에서 구문을 찾으십시오 ). 물론 ! newline! , 설정하면서 대답을 하지만 \ n 더 편리합니다. 외부에서 전달 될 수 있습니다 ( Hello R2 \ nD2 시도 ). 줄 바꿈을 보유한 변수의 이름을 모르는 사람은 없습니다 (예, Hello C3! newline! P0같은 방식으로 작동).

위의 예는 다음과 같이 서브 루틴 또는 독립형 배치로 세분화 될 수 있습니다 call:mlecho Hi\nI'm your comuter.

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^


echo %text:\n=!nl!%
goto:eof

추가 백 슬래시는 스크립트가 \ n 하위 문자열을 구문 분석하는 것을 막지 않습니다.


1
당신은 본질적으로 위의 Jeb의 대답과 같은 일을하고 있습니다.
Squashman 2016 년

위에서 읽은 답변은 매우 도움이되었지만 \ n 구문 분석 할 스크립트 od 서브 루틴을 호출해야하므로 어디서나 트릭을 구현하지 않아도됩니다. 이것은 솔루션을 개선하는 데 필요 했으며이 개선 사항을 공유했습니다. 그것이 어떤 동물에게도 해를 끼치 지 않기를 바랍니다.
Tomator

2

이것은 나를 위해 일했고 지연 확장이 필요하지 않았습니다.

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

다음과 같이 출력을 씁니다.

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .

4
-1 echo asdf >myfile.txt은 정확히 동일한 결과를 생성합니다. echo문자열 끝에 줄 바꿈을 추가합니다.
BlueRaja-대니 Pflughoeft

2
괄호를 새 줄에 사용하는 것이 가치를 인정한 유일한 사람인 큰 대답. 나는 이것이 DOS 제작자들이 당신이 의도 한 방식이라고 생각합니다.
djangofan

2

일괄 적으로 새 줄을 시작하려면 다음과 같이 "echo ["를 추가하기 만하면됩니다.

echo Hi!
echo[
echo Hello!

5
이름이 느린 파일이 있으면 느리고 실패합니다.echo[.bat
jeb

뭐? 즉시 작동하고 echo [.bat 파일도 삭제해야합니다.
PryroTech

2
에코와 거의 동일합니다. 통사론.
PryroTech

5
예, echo.나쁜 해결책이기도합니다.
jeb

1
이전 답변에서 볼 수 있듯이 경로에서 파일을 먼저 찾으려고하면 너무 느려집니다. 에 대해서도 마찬가지입니다 echo.. 스크립트에서 줄 바꿈이 필요하기 때문에 스크립트 사용자가 시스템에서 파일을 삭제할 것으로 기대하는 것은 나에게 좋은 디자인처럼 들리지 않습니다.
Abel

2

Ken 및 Jeb 솔루션이 잘 작동합니다.

그러나 새 줄은 LF 문자로만 생성되며 CRLF 문자 (Windows 버전)가 필요합니다.

이를 위해 스크립트 끝에서 LF를 CRLF로 변환했습니다.

예:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt

0

사용할 수 있습니다 @echo(@echo + [space] + [insecable space])

참고 : Alt + 0160을 사용하여 공간을 확보 할 수 있습니다.

그것이 도움이되기를 바랍니다 :)

[편집] 흠 당신이 맞아요, 나는 Makefile에 필요했고, 거기에서 완벽하게 작동합니다. 내 대답이 배치 파일에 적합하지 않은 것 같습니다 ... 내 잘못.


나는 ECHO ist eingeschaltet (ON).빈 줄을 얻지 못했습니다, cmd-prompt에서 시도
jeb

1
그것은 줄 바꿈이 아닌 끊임없는 공간입니다.
Ry-

0

이 솔루션은 작동합니다 (테스트 됨).

type nul | more /e /p

이렇게하면 분리 된 줄 바꿈이 캐리지 리턴 줄 바꿈 조합으로 변환됩니다.


그러나 이것이 어떻게 텍스트 사이에 줄 바꿈을 추가합니까? 질문에 관한 것입니다echo hello \n world

나에게서 공감. 이것은 질문에 대한 답변이 아닙니다
Mesalcode

-2

나는 그것을보다 간단하게 만들 수 없다.

echo echo hello^&echo world^&pause>silly.bat                       
call silly.bat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.