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