[windows] 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


답변