답변:
^
캐럿과 그 다음 줄 바꿈이 완전히 제거되었다는 것을 기억하는 한 캐럿과 긴 줄을 나눌 수 있습니다 . 따라서 줄 바꿈하는 공간이 있으면 공간을 포함하십시오. ( 아래에 더 자세히 설명되어 있습니다. )
예:
copy file1.txt file2.txt
다음과 같이 작성됩니다 :
copy file1.txt^
file2.txt
echo
.
co^␍py ^␍file1 ^␍file2
. 혼란을 피하기 위해 댓글을 삭제하는 것이 좋습니다. 특히이 질문은 매우 인기있는 질문입니다.
캐럿의 규칙은 다음과 같습니다.
줄 끝의 캐럿은 다음 줄을 추가하고 추가 된 줄의 첫 문자는 이스케이프됩니다.
캐럿을 여러 번 사용할 수 있지만 전체 줄은 최대 줄 길이 ~ 8192자를 초과하지 않아야합니다 (Windows XP, Windows Vista 및 Windows 7).
echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*
echo Test2
echo one & echo two
--- Output ---
Test2
one
two
echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two
echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two
다음 문자의 이스케이프를 억제하기 위해 리디렉션을 사용할 수 있습니다.
리디렉션은 캐럿 바로 앞에 있어야합니다. 그러나 캐럿 이전에 리디렉션에 대한 호기심이 있습니다.
캐럿에 토큰을 배치하면 토큰이 제거됩니다.
echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
또한 줄 바꿈 을 문자열 에 포함시킬 수도 있습니다 .
setlocal EnableDelayedExpansion
set text=This creates ^
a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed
빈 줄은 성공에 중요합니다. 이것은 확장 확장에서만 작동합니다. 그렇지 않으면 라인 피드 후에 나머지 라인이 무시됩니다.
다음 문자가 줄 바꿈 인 경우에도 줄 끝의 캐럿이 다음 줄 바꿈을 무시하고 다음 문자를 이스케이프하므로 작동합니다 (이 단계에서는 캐리지 리턴이 항상 무시 됨).
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
작동하지 않습니다. 작동하지 않습니다! 공백을 추가해야했습니다 copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.
(이것은 기본적으로 Wayne의 답변을 다시 작성 했지만 캐럿 주위의 혼란이 해결되었습니다. 그래서 CW로 게시했습니다. 답변을 편집하는 것이 부끄럽지 않지만 완전히 다시 작성하는 것은 부적절합니다.)
캐럿 ( ^
)으로 긴 줄을 나눌 수 있습니다 . 캐럿과 그 뒤의 개행 은 명령에서 완전히 제거 되므로 매개 변수 사이와 같이 공백이 필요한 곳에 두어야합니다. 공백도 포함 시키 ^
려면 (다음 줄 앞 이나 다음 줄의 시작 부분에서 후자를 선택하면 계속 명확하게하는 데 도움이됩니다).
예 : (모두 Windows XP 및 Windows 7에서 테스트)
xcopy file1.txt file2.txt
다음과 같이 쓸 수 있습니다 :
xcopy^
file1.txt^
file2.txt
또는
xcopy ^
file1.txt ^
file2.txt
또는
xc^
opy ^
file1.txt ^
file2.txt
(마지막 작품이라는 타협 공백이 없기 때문에 xc
그리고 ^
다음 줄의 시작 부분에서, 그리고 공백이. 그래서 당신은 제거 할 때 ^
와 줄 바꿈을, 당신이 얻을 ... xcopy
.)
가독성과 안전을 위해 매개 변수 사이에서만 나누는 것이 가장 좋습니다 (공백 포함).
에 큰 문제가있는 것처럼 배치 파일에서 마지막 ^
이 아닌지 확인하십시오 .
여러 명령을 괄호 안에 넣고 여러 줄로 펼칠 수 있습니다. 따라서 다음과 같은 echo hi && echo hello
것을 넣을 수 있습니다.
( echo hi
echo hello )
또한 변수가 도움이 될 수 있습니다.
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...
또한 공간이있는 경우에만 조건부에서 따르기를 좋아 ^
한다는 캐럿 ( )을 보았습니다 if
.
if exist ^
cmd1.bat && cmd2.bat
은 parens 양식과 다릅니다. execute cmd2.bat
iff가 cmd1.bat
성공적으로 실행됩니다 (설정없이 %errorcode%
). 후자의 형식은 무조건 실행됩니다. 예상치 못한 (적어도 나를 위해), 분명히, 당신은 둘 다의 조합을 사용할 수 없다는 것 &&
입니다.
( echo <line break here> hello )
빈 줄이 생깁니다.
그러나 for 루프 값의 중간에서 분할하면 캐럿이 필요하지 않습니다 (실제로 사용하려고하면 구문 오류로 간주됩니다). 예를 들어
for %n in (hello
bye) do echo %n
안녕하세요 이후 또는 안녕히도 공간이 필요하지 않습니다.
for
구문의 일부입니다. "세트 용"의 요소 구분 기호는 공백, 쉼표, 세미콜론, 등호, Tab 문자 및 줄 바꿈입니다.
do
부분에 여러 개의 / 중첩 된 if-else
문장이 포함되어 있으면 어떻게 됩니까?
^
명령 텍스트 바로 앞 과 뒤에 공백을 추가하면 공백없이 다음 줄을 시작할 수 있습니다 .