긴 명령을 배치 파일의 여러 줄로 나누려면 어떻게합니까?
캐럿과 그 뒤에 나오는 개행 문자가 완전히 제거되었다는 것을 기억하는 한 ^
캐럿으로 긴 행을 분리 할 수 있습니다. 따라서 줄을 끊을 공간이 있으면 공간을 넣으십시오. ( 아래 그 이상 )
예:
copy file1.txt file2.txt
다음과 같이 쓰여질 것입니다 :
copy file1.txt^
file2.txt
캐럿에 대한 규칙은 다음과 같습니다.
줄 끝의 캐럿이 다음 줄을 추가하면 추가 된 줄의 첫 번째 문자가 이스케이프됩니다.
캐럿은 여러 번 사용할 수 있지만 전체 줄은 최대 줄 길이 ~ 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
빈 줄은 성공을 위해 중요합니다. 이는 지연된 확장에서만 작동하며, 그렇지 않으면 줄 바꿈 후에 나머지 줄이 무시됩니다.
다음 문자가 줄 바꿈 인 경우에도 줄 끝의 캐럿이 다음 줄 바꿈을 무시하고 다음 문자를 이스케이프하기 때문에 작동합니다 (캐리지 리턴은이 단계에서 항상 무시됩니다).
(이것은 기본적으로 웨인의 답변 을 재 작성한 것이지만 캐럿 주위의 혼란이 해결되었으므로 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
및 ^
사이에 공백이없고 다음 줄의 시작 부분에 공백이 없기 때문입니다. 따라서 ^
및 개행을 제거하면 get ...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
조건문이 공백이있는 경우에만 따라야한다는 carets (^
)를 발견했습니다.
if exist ^
그러나 for 루프의 값의 중간에서 분할하는 것은 캐럿을 필요로하지 않는다는 것을 나타냅니다 (실제로 하나를 사용하려고하면 구문 오류로 간주됩니다). 예를 들어,
for %n in (hello
bye) do echo %n
안녕하세요 또는 안녕히 가십시오 전에 공간이 필요하지 않습니다.