Programming

Windows 배치 : FOR 루프에서 둘 이상의 명령을 호출 하시겠습니까?

procodes 2020. 7. 22. 22:10
반응형

Windows 배치 : FOR 루프에서 둘 이상의 명령을 호출 하시겠습니까?


Windows 배치 파일에서 단일 FOR 루프 에서 둘 이상의 명령을 호출 할 수 있습니까? 예를 들어 파일 이름을 인쇄하고 삭제 한 다음에

@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.

이 경우 두 가지 별개의 FOR 루프를 수행하여 해결할 수 있습니다. 하나는 이름을 표시하고 다른 하나는 파일을 삭제하기 위해 하나의 루프에서만 수행 할 수 있습니까?


FOR /r %%X IN (*) DO (ECHO %%X & DEL %%X)

&짧은 명령에는 사용하는 것이 좋지만 한 줄은 매우 오래 걸릴 수 있습니다. 이 경우 여러 줄 구문으로 전환하십시오.

FOR /r %%X IN (*.txt) DO (
    ECHO %%X
    DEL %%X
)

배치 ()문제. 둥근 대괄호 DO는 같은 줄에 배치해야합니다. 그렇지 않으면 배치 파일이 올바르지 않습니다.

자세한 내용 if /?|find /V ""을 참조하십시오.


SilverSkin과 Anders가 모두 맞습니다. 괄호를 사용하여 여러 명령을 실행할 수 있습니다. 그러나 명령 자체 (및 해당 매개 변수)에 괄호가 포함되어 있지 않은지 확인해야합니다. cmd중첩 된 괄호 세트를 정상적으로 처리하는 대신 탐욕스럽게 첫 번째 닫는 괄호를 검색합니다. 이로 인해 나머지 명령 줄이 구문 분석에 실패하거나 일부 괄호가 명령에 전달 될 수 있습니다 (예 :) DEL myfile.txt).

이에 대한 해결 방법은 루프 본문을 별도의 함수로 분할하는 것입니다. 함수 본문에 "떨어지지"않으려면 함수 본문을 뛰어 넘어야 할 수도 있습니다.

FOR /r %%X IN (*.txt) DO CALL :loopbody %%X
REM Don't "fall through" to :loopbody.
GOTO :EOF

:loopbody
ECHO %1
DEL %1
GOTO :EOF

참고 URL : https://stackoverflow.com/questions/2252979/windows-batch-call-more-than-one-command-in-a-for-loop

반응형