source

배치 파일의 새 회선을 에코하려면 어떻게 해야 합니까?

manysource 2023. 4. 20. 21:36

배치 파일의 새 회선을 에코하려면 어떻게 해야 합니까?

배치 파일 출력에서 새 줄을 삽입하려면 어떻게 해야 합니까?

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

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%
    
  • user2605194user287293의 답변에서 파생된 버전입니다(' 사이에 아무것도 없습니다).=및 ' ' ' '^

    set nl=^&echo(
    set \n=^&echo(
    

    합니다.echoed:

    > 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> 행을 내립니다.

는 콘솔하단에 도달하지 않은 경우에만 작동합니다.

하기 위한 있지 않기 에 커서를 입니다.CRCRLF이치노

이 방법은 효과가 있었습니다.확장 지연은 필요 없습니다.

@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