배치 파일 출력에서 줄 바꿈을 어떻게 삽입 할 수 있습니까?
나는 다음과 같은 것을하고 싶다 :
echo hello\nworld
다음과 같이 출력됩니다.
hello
world
echo Yes&echo No
배치 파일 출력에서 줄 바꿈을 어떻게 삽입 할 수 있습니까?
나는 다음과 같은 것을하고 싶다 :
echo hello\nworld
다음과 같이 출력됩니다.
hello
world
echo Yes&echo No
답변:
echo hello & echo.world
즉 & echo.
, 개행에 대한 상수로 정의 할 수 \n
있습니다.
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
사용하다:
echo hello
echo.
echo world
echo "Makefile contents (which has \n)" > Makefile
, 여러 에코로 그것은 것없는 일
(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
다음 echo line 2 >> Makefile
. 를 사용 >>
하면 출력이 파일에 추가되므로이 경우에 필요한 동작입니다.
여기에 다음을 포함하는 .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 문 사이에 코드 만 있으면됩니다.
set nl=^&echo.
그런 다음 echo hello %nl% world
동일한 효과를냅니다.
echo:
cmd / bat-files에는 빈 줄을 쓰는 표준 기능이 있으며, cmd-output에서 새 줄을 에뮬레이트합니다.
@echo off
@echo line1
@echo:
@echo line2
위의 cmd 파일에서 인용 한 결과 :
line1
line2
echo(
. 문제가 발생할 수 있지만 실제로는 완벽하게 작동합니다. 다른 모든 양식에는 명령이 원하는대로 수행되지 않는 상황이 하나 이상 있습니다.
ECHO(
실패 하는 시나리오를 생각해 낸 적이 없습니다 .
echo
, 그 효과는 무엇입니까?"
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:
그들이 정말로 느릴 수있는 스크립트가 네트워크 드라이브처럼 실행됩니다 위치 따라 피해야한다.
call :pause line1!\n!line2
, 개행 문자가있는 문자열을 배치 서브 루틴에 매개 변수로 전달하는 경우 서브 루틴으로 시작 setlocal EnableDelayedExpansion
하고 종료 setlocal DisableDelayedExpansion
하여 개행이 조기에 해석되지 않도록하십시오.
echo,
echo;
echo(
echo/
echo+
echo=
과 도적 갤러리 echo.
echo\
echo:
. 이 일이 왜 성스러운 지 설명해야한다면, 나는 당신에게 무료 맥주를 빚을 것입니다.
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
echo.
먼저 해당 이름으로 파일을 찾으려고하므로 사용 하지 마십시오 . 다음과 같은 다른 문장 부호를 사용하십시오.echo,
파일로 리디렉션 할 무언가를 반향 할 때 여러 반향 명령이 작동하지 않습니다. 아마도 ">>"리디렉터가 좋은 선택이라고 생각합니다.
에코 안녕하세요> 온도 에코 세계 >> 온도
(echo hello && echo world) > temp
Nathan J. Brauer가 (현재) 허용되는 답변에 대한 의견에서 언급했습니다.
Grimtron이 제안한 것처럼이를 정의하는 간단한 예는 다음과 같습니다.
@echo off
set newline=^& echo.
echo hello %newline%world
C:\>test.bat
hello
world
echo hello %newline%world
줄 을 반복하면 사이에 공백이 없습니다.
echo "Hello %newline% world"
따옴표 안에 있으므로 실패합니다. 실제 줄 바꿈 이 아니기 때문입니다 .
MINGW make makefile에서 빈 줄을 에코하려고해서 여기에 오는 사람이 있다면
@cmd /c echo.
단순히 사용 echo.
하는 것이 두려운 원인process_begin: CreateProcess(NULL, echo., ...) failed.
오류 메시지가 나타납니다.
나는 이것이 적어도 다른 사람에게 도움이되기를 바랍니다 :)
변수에 전달할 수있는 문자열 리터럴에서 유명한 \ 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 하위 문자열을 구문 분석하는 것을 막지 않습니다.
이것은 나를 위해 일했고 지연 확장이 필요하지 않았습니다.
@echo off
(
echo ^<html^>
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause
다음과 같이 출력을 씁니다.
<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
echo asdf >myfile.txt
은 정확히 동일한 결과를 생성합니다. echo
문자열 끝에 줄 바꿈을 추가합니다.
일괄 적으로 새 줄을 시작하려면 다음과 같이 "echo ["를 추가하기 만하면됩니다.
echo Hi!
echo[
echo Hello!
echo[.bat
echo.
나쁜 해결책이기도합니다.
echo.
. 스크립트에서 줄 바꿈이 필요하기 때문에 스크립트 사용자가 시스템에서 파일을 삭제할 것으로 기대하는 것은 나에게 좋은 디자인처럼 들리지 않습니다.
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 + [space] + [insecable space])
참고 : Alt + 0160을 사용하여 공간을 확보 할 수 있습니다.
그것이 도움이되기를 바랍니다 :)
[편집] 흠 당신이 맞아요, 나는 Makefile에 필요했고, 거기에서 완벽하게 작동합니다. 내 대답이 배치 파일에 적합하지 않은 것 같습니다 ... 내 잘못.
ECHO ist eingeschaltet (ON).
빈 줄을 얻지 못했습니다, cmd-prompt에서 시도