배치 파일의 새 회선을 에코하려면 어떻게 해야 합니까?
배치 파일 출력에서 새 줄을 삽입하려면 어떻게 해야 합니까?
나는 다음과 같은 것을 하고 싶다.
echo hello\nworld
출력:
hello
world
용도:
echo hello
echo:
echo world
echo hello & echo.world
, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ)을& echo.
행의 \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 문장의 코드만 있으면 됩니다.
인 특징이 .echo:
cmd이 경우 cmd-output의 새 .
@echo off
echo line1
echo:
echo line2
또는
@echo line1 & echo: & echo line2
인용된 위의 cmd 파일의 출력:
line1
line2
켄의 대답처럼, 하지만 지연된 확장을 사용하면서.
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
파서가 단일 라인피드로 해석을 정지하기 때문에 에러가 발생합니다.
것은, 「 」, 「 」를 참조해 주세요.
는 Vista 배치됩니다.
Windows 명령어 인터프리터(CMD.EXE)는?
: 회피: " " "echo.
는 싱글에 않습니다.echo
을 사용하다
하지만 다른 대답에도 불구하고echo.
행을 하려면 , 「신행」, 「신행」, 「신행」에 .echo.
cmd 느리고 할 수 있기 때문에 경우입니다.cmd.exe라는 이름의 입니다.ECHO
시작해보도록 하겠습니다.
빈 행만 인쇄하려면 다음 중 하나를 사용할 수 있습니다.
echo,
echo;
echo(
echo/
echo+
echo=
,, 용은은 but의 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%
스테이트먼트에 을 삽입할 가 있는 경우 든지 사용할 수 .은 당신의 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n
하다
내역
set n=
합니다.n
★★★★
^
무효로 하다
&
같은 회선상에서 다른 명령어를 실행하는 것을 의미합니다.은 신경 쓰지 .&&
요합니니다다
echo.
문을 합니다.echo の o continues 。
코드인 변수를 실제로 생성하여 다른 명령어 내에서 사용할 수 있기 때문에 이 모든 것이 가능합니다.배치가 셸 스크립팅 언어 중 가장 진보된 언어가 아니기 때문에 게토 함수와 비슷합니다.이는 배치의 변수 사용률이 낮기 때문에 int, chars, float, string 등을 자연스럽게 지정하지 않기 때문입니다.
당신이 교활하다면, 당신은 이것을 다른 것과 함께 사용할 수 있습니다.예를 들어 탭을 에코하는 데 사용합니다.
set t=^&echo. ::there are spaces up to the double colon
파일로 리다이렉트하기 위해 무언가를 에코할 때 여러 echo 명령어는 작동하지 않습니다.리다이렉터 ">"는 적절한 선택이라고 생각합니다.
echo hello > tempecho world >> 온도
결과를 파일에 저장해야 하는 경우 다음을 사용할 수 있습니다.
(echo a & echo: & echo b) > file_containing_multiple_lines.txt
그림트론이 제안하는 바와 같이 이를 정의하는 간단한 예를 다음에 제시하겠습니다.
@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
이것을 배치 파일에 넣을 때, '%'는 두 배가 됩니다.
(for %%i in (a b "c d") do @echo %%~i)
MINGW make file의 빈 줄을 메아리치고 싶어서 오신 분 있으면 제가 쓰겠습니다.
@cmd /c echo.
말하면echo.
의 이 되다process_begin: CreateProcess(NULL, echo., ...) failed.
에러 메시지
이것이 적어도 한 명이라도 도움이 되기를 바랍니다.
밤잠을 설치고 여기에 있는 모든 답을 읽은 후 SS64 > CMD를 많이 읽고 많은 시도와 오류 끝에 다음을 발견했습니다.
궁극의 솔루션
TL;DR
...얼리 어답터용.
중요한! |
---|
Unicode를 지원하는 C&P용 텍스트 에디터(예: Notepad++!)를 사용합니다. |
Newline 환경 변수 설정...
현재 CMD 세션에서 ...
중요한! |
---|
「」와 「」^ 의 = 사이는 편집하지 말아 주세요(보이지 않지만, 그 사이에 문자가 있습니다).여기도 편집 모드도 아닙니다.C&P는 여기서 동작합니다.) |
:: Sets newline variables in the current CMD session
set \n=^&echo(
set nl=^&echo(
현재 사용자용
중요한! |
---|
(두 번째)␣ 와 (^ 두 번째) 사이는 편집하지 마십시오! (보이지 않지만 그 사이에 문자가 있습니다.)여기도 편집 모드도 아닙니다.C&P는 여기서 동작합니다.) |
:: Sets newline variables for the current user [HKEY_CURRENT_USER\Environment]
setx \n ^&echo(
setx nl ^&echo(
로컬 머신의 경우
중요한! |
---|
(두 번째)␣ 와 (^ 두 번째) 사이는 편집하지 마십시오! (보이지 않지만 그 사이에 문자가 있습니다.)여기도 편집 모드도 아닙니다.C&P는 여기서 동작합니다.) |
:: Sets newline variables for the local machine [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
setx \n ^&echo( /m
setx nl ^&echo( /m
왜 거의?
같은 인쇄된 행에 쌍으로 되어 있지 않은(열렸다 닫혔다) 이중 따옴표에는 사용할 수 없습니다.단, 이중 따옴표가 텍스트의 마지막 문자인 경우는 다음과 같습니다.
동작:
""echo %\n%...after "newline". Before "newline"...%\n%...after "newline"
(인쇄된 각 라인에 페어링)★★★★★★★★★★★★★★★★★
echo %\n%...after newline. Before newline...%\n%...after newline"
으로 되어 있지 않은 이중 문자입니다하지 않습니다.
echo "%\n%...after newline. Before newline...%\n%...after newline"
(이중 패드는 같은 인쇄 라인에 페어링되지 않음)완전한 이중 따옴표로 둘러싸인 텍스트에 대한 회피책(Windows 배치: 새 줄 없이 에코):
set BEGIN_QUOTE=echo ^| set /p !=""" ... %BEGIN_QUOTE% echo %\n%...after newline. Before newline...%\n%...after newline"
다음과 같은 따옴표로 둘러싸인 텍스트와 함께 작동합니다.
echo '%\n%...after newline. Before newline...%\n%...after newline'
부가가치:이스케이프 문자
메모 |
---|
= 여기에서는 표시되지 않지만 편집 모드입니다.C&P: C&P입니다. |
:: Escape character - useful for color codes when 'echo'ing
:: See https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#text-formatting
set ESC=
색상에 대해서는, https://imgur.com/a/EuNXEar 및 https://gist.github.com/gerib/f2562474e7ca0d3cda600366ee4b8a45 를 참조해 주세요.
두 번째 부가가치:Unicode 문자를 쉽게 가져오기
키워드로 87,461개의 Unicode 문자(AToW)를 취득하기 위한 페이지:https://www.amp-what.com/
이유
켄의 답변은 (안 해봤는데) 효과가 있는 것 같습니다만, 왠지...음...알다시피:
set NLM=^ set NL=^^^%NLM%%NLM%^%NLM%%NLM%
user2605194와 user287293의 답변에서 파생된 버전입니다(' 사이에 아무것도 없습니다).
=
및 ' ' ' '^
set nl=^&echo( set \n=^&echo(
합니다.
echo
ed:> echo %\n%Hello%\n%World! echo & echo(Hello & echo(World! echo is ON. Hello World
echo
.다른 모든 것은 거의 3을 호출하고 있습니다.
echo
알기 쉽게 설명하다.저는 짧은 한 줄짜리 영화가 좋아요.
뒷이야기
set \n=^&echo:
이 회답에 기재되어 있는 빈칸(및 그 상태를 인쇄)에서는, Novell이 널리 사용되고 있던 네트워크나 437이나 850등의 코드 페이지가 사용되고 있던 시절의 + 255유저가 최초로 생각났습니다.단, 0d255/0xFF는 현재 유니코드로 ÿ(라틴어 작은 글자 Y와 디아레시스)입니다.
그 후 Unicode에는 일반 0d32/0x20보다 많은 공간이 있지만 모두 화이트스페이스로 간주되어 ""와 같은 동작이 발생한다는 것을 알게 되었습니다.
그러나 더 많은 것이 있습니다: 화이트 스페이스로 간주되지 않는 제로 폭의 공간과 조이너입니다.문제는 0폭의 경우 선택할 것이 없기 때문에 C&P를 할 수 없다는 것입니다.그래서 그 중 하나에 가까운 것을 제로폭 공간(U+200B) 직전에 있는 헤어 공간(U+200A)을 메모장++에 복사하여 Hex-Editor 플러그인을 열고 비트 표현을 찾았습니다.E2 80 8A
로 변경했습니다.E2 80 8B
! ㅇㅇㅇㅇㅇㅇ, ㅇㅇㅇㅇㅇ에 요.\n
환경 변수입니다.
Ken과 Jeb의 솔루션은 잘 기능합니다.
그러나 새 행은 LF 문자만 사용하여 생성되므로 CRLF 문자(Windows 버전)가 필요합니다.
이를 위해 스크립트의 마지막에 LF를 CRLF로 변환했습니다.
예:
TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
변수에 전달할 수 있는 문자열 리터럴에 유명한 \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을 줄바꿈 콘텐츠로 대체합니다(도움말 집합에서 구문 검색).물론!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
점, 점 추가, 점 추가.
그 the의 echo
:
echo.
새로운 행을 일괄적으로 시작하려면 다음과 같이 "에코[]"만 추가하면 됩니다.
echo Hi!
echo[
echo Hello!
서브스트링하여 '스페이스를 요?echo;
set "_line=hello world"
echo\%_line: =&echo;%
- 결과:
hello
world
- 을 \n으로 바꿉니다.
echo;
set "_line=hello\nworld"
echo\%_line:\n=&echo;%
가상단말기 시퀀스를 가진 윈도 10에 대해서는 커서 위치를 고도로 제어하는 수단이 존재한다.
이스케이프 시퀀스 0x1b를 정의하려면 다음 명령을 사용할 수 있습니다.
@Echo off
For /f %%a in ('echo prompt $E^| cmd')Do set \E=%%a
문자열 사이에 새 행을 하나 출력하려면:
<nul set /p "=Hello%\E%[EWorld"
n
(여기서 ★★★★★★★★★★)n
됩니다.
<nul set /p "=%\E%[nE"
많이
콘솔 가상 터미널 시퀀스에 따라 커서 위치를 지정하는 모든 솔루션은 다음과 같습니다.
순서 | 코드 | 묘사 | 행동 |
---|---|---|---|
ESC [<n> E | CNL | 커서 다음 행 | 현재 위치에서 아래로 <n> 행을 내립니다. |
는 콘솔 창 하단에 도달하지 않은 경우에만 작동합니다.
하기 위한 있지 않기 에 커서를 입니다.CR
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
+ [ [ space ])(@secute + [ space ]+ [ security space ])
주의: 안전하지 않은 공간은 Alt+0160으로 얻을 수 있습니다.
도움이 되었으면 좋겠다:)
[편집] 음, 맞아요. Make file이 필요했어요. 완벽하게 작동해요.제 답변이 배치 파일에 적합하지 않은 것 같습니다.제 잘못이에요.
간단하죠.
set nl=.
echo hello
echo%nl%
REM without space ^^^
echo World
결과:
hello
world
이 기능은 이스케이프 키를 시뮬레이션하여 회선을 클리어하기 때문에 콘솔에서는 작동하지 않습니다.
하여 을(를) 치환합니다.<ESC>
0x1b 이스케이프 문자를 사용하거나 다음 Pastebin 링크를 사용합니다.
:: Replace <ESC> with the 0x1b escape character or copy from this Pastebin:
:: https://pastebin.com/xLWKTQZQ
echo Hello<ESC>[Eworld!
:: OR
set "\n=<ESC>[E"
echo Hello%\n%world!
Ken의 답변에 변형을 추가하여 환경변수 설정값을 새로운 행으로 표시합니다.
이 메서드를 사용하여 VAR 내의 문자열에 오류 조건을 추가한 후 모든 오류 체크 출력을 모든 오류 요약으로 파일에 추가합니다.
이것은 완전한 코드가 아니라 하나의 예시입니다.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: the two blank lines are required!
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
:: Example Usage:
Set ErrMsg=Start Reporting:
:: some logic here finds an error condition and appends the error report
set ErrMsg=!ErrMsg!!NL!Error Title1!NL!Description!NL!Summary!NL!
:: some logic here finds another error condition and appends the error report
set ErrMsg=!ErrMsg!!NL!Error Title2!NL!Description!NL!Summary!NL!
:: some logic here finds another error condition and appends the error report
set ErrMsg=!ErrMsg!!NL!Error Title3!NL!Description!NL!Summary!NL!
echo %ErrMsg%
pause
echo %ErrMsg% > MyLogFile.log
로그 및 화면 출력은 다음과 같습니다...
언급URL : https://stackoverflow.com/questions/132799/how-can-i-echo-a-newline-in-a-batch-file
'source' 카테고리의 다른 글
Swift에서 Timer(기존 NSTimer)를 사용하려면 어떻게 해야 하나요? (0) | 2023.04.20 |
---|---|
WPF: 캔버스 마우스 이벤트가 빈 공간에서 실행되지 않음 (0) | 2023.04.20 |
Azure blob을 공개적으로 다운로드할 때 친숙한 파일 이름 (0) | 2023.04.20 |
반응성UI 실가동 준비 완료? (0) | 2023.04.20 |
특정 파일을 저장하려면 어떻게 해야 하나요? (0) | 2023.04.20 |