윈 도 우 배치파일 for문 관련 질문드립니다.
2019.01.04 14:12
특정 드라이브를 찾기 위해 for문을 사용하는 경우가 많잖아요?
예를들어 다음과 같은 for문
for /d %%i in (C D E F G H I .......... Z) do %%i:\test.exe
가 있고 test..exe가 G 드라이브에있어서 실행이 되었다면
H이후의 동작은 의미가 없는데요. 반복문이 계속 동작되도 특별히 에러가 나거나 하지는 않지만
간결설 및 혹시 모를 에러를 방지하기 위하여 원하는 동작이 실행된 이후에는 for문이 중지되도록 하고 싶은데요.
방법이 있을까요?
위 예제처럼 일회성으로 for 이후에 명렬줄이 없다면
for /d %%i in (C D E F G H I ...중략... Z) do (
%%i:\test.exe
if exist %%i:\test.exe exit
)
와 같이 작성해서 명령창을 끝내도록 하면 되겠지만
for문 이후에 명렬줄이 더 존재한다면 위 방법은 사용하면 안될텐데요...
for문을 중간에 중지 시키고 다음 스크립트로 넘어가게 하는 방법은 뭐가 있을까요?
for라는 배치파일을 하나 더 만들고 그 배치파일을 불러오는 방식으로
하면 어떨까도 생각해봤지만. 하나의 배치파일 안에서 동작되도록 하고 싶은데 방법이 있을까요?
댓글 [5]
-
메리아 2019.01.04 14:48
-
-엔지니어- 2019.01.04 14:55
결국엔 goto문을 또 써야 하는 거군요... 이미 goto만 10개는 들어간 것 같은데 ㅠㅠ
자세한 답변 고맙습니다~^^
-
-엔지니어- 2019.01.04 16:03
앗...
아직 테스트 해보진 않았지만 뭔가 이상한 부분이 있어서 제 질문 드립니다.
set dstDrive=FALSE
for /d %%i in (C D E F G H I ...중략... Z) do (
if exist %%i:\test.exe (
set dstDrive=%%i
goto BREAK1
)
)
:BREAK1if "%dstDrive%" == "FALSE" (
echo 파일없음.
goto END
)%dstDrive%:\test.exe
:END
위 명령줄에서 파란색 if 문에 의하여 test.exe 파일을 발견하면(G드라이브라에 존재한다 가정)
변수 dstDrive(이하 변수)의 값을 test.exe가 존재하는G로 바꾸고
BREAK1 명령줄로 넘어가게 되는데요.
BREAK1에 해당하는 명렬줄을 보면
변수가 "FALSE" 일 경우
파일 없음을 화면에 출력 후
END 명령줄로 이동하게 되어있는데요.
파란색 if 명령줄에 의하여 변수가 G로 변경되었기에
BREAK1에 존재하는 if는 동작할 수 없지 않나요?
-
메리아 2019.01.04 17:15
발견 못하면 dstDrive는 여전히 FALSE이기 때문에 파일없음에 걸리죠.
발견 했으면 밑의 if는 건너뛰게 되구요.
-
-엔지니어- 2019.01.08 17:43
제가 잘 못 생각한 것 같네요~ 테스트 한번 해보겠습니다~
답변 고맙습니다.^^
배치파일에는 기본적으로 break문 종류는 없고
goto만이 분기변환 명령어로 존재합니다.
그러므로 아래와 같이 하시면 됩니다.
-------------------------------------------
set dstDrive=FALSE
for /d %%i in (C D E F G H I ...중략... Z) do (
if exist %%i:\test.exe (
set dstDrive=%%i
goto BREAK1
)
)
:BREAK1
if "%dstDrive%" == "FALSE" (
echo 파일없음.
goto END
)
%dstDrive%:\test.exe
:END
-------------------------------------------
물론 본문처럼 그냥 바로 실행시키고 탈출시켜도 되지만
그러면 "없다는 개념"을 인식 못하고 지나갈 수 있기 때문에
저런식으로 해주는게 좋습니다.