윈 도 우 배치파일 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
제가 잘 못 생각한 것 같네요~ 테스트 한번 해보겠습니다~
답변 고맙습니다.^^
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
77511 | 윈 도 우| 윈10 Recent기능 끄는 방법 [7] | WinMa | 578 | 01-14 |
77510 | 윈 도 우| wim파일 vhd설치 가상부팅 후 실컴 부팅등록하여 멀티부팅 ... [5] | 간장종지646 | 289 | 01-14 |
77509 | 윈 도 우| Hiren's PE 다운로드해서 사용해도 문제 없을까요? [1] | chobo333 | 284 | 01-14 |
77508 | 윈 도 우| 윈도우 설치 후 [4] | ㄴㅇ | 273 | 01-14 |
77507 | 윈 도 우| 제가가진 pe는 nvme m2 가 인식이안되서 부탁드립니다 [5] | 조곰돌 | 691 | 01-14 |
77506 | 소프트웨어| 윈도우10 다음팟플레이어 문의 [7] | anko | 1099 | 01-13 |
77505 | 하드웨어| 그래픽카드 [4] | 정나라 | 582 | 01-13 |
77504 | 기 타| 지포스 최신드라이버 설치 오류 [5] | 애독자 | 946 | 01-13 |
77503 | 윈 도 우| 윈도우 10 오른쪽 마우스 메뉴문의 [5] | anko | 657 | 01-13 |
77502 | 하드웨어| USB외장하드에 저장된 파일 인식하지 못하는 문제 ?? [3] | Hunting | 452 | 01-13 |
77501 | 윈 도 우| winpe iso 계속 부팅반복만... [2] | oneshotone | 474 | 01-12 |
77500 | 소프트웨어| Windows 10 버전 1809 빌드 17763.288 업데이트 실패하네요... [1] | 한걸음 | 972 | 01-12 |
77499 | 소프트웨어| VMWARE 에서 USB 인식이 안됩니다. [3] | ton3d | 625 | 01-12 |
77498 | 윈 도 우| vhd를 쓰는 경우 디스크 수명에 관하여 [6] | 이런아힝흥 | 592 | 01-12 |
77497 | 모 바 일| 모바일 크롬에서 사용한 홈페이지 아이콘 어떻게 끌까요. | ws원이 | 214 | 01-12 |
77496 | 윈 도 우| 오류로 인해 늘어난 하드용량 없애는 방법 [7] | 우주인 | 621 | 01-12 |
77495 | 하드웨어| 케이스 문의 [4] | 뷰티블마인 | 528 | 01-12 |
77494 | 소프트웨어| Interrnet Download Manager 다운로드 패널이 안 보입니다. [3] | 다줄꺼야 | 715 | 01-12 |
77493 | 하드웨어| 광부 rx580 4gb mi 버전 기가바이트 구입을 했는데요 [11] | 대륙의별 | 868 | 01-12 |
77492 | 소프트웨어| 음.. 이것좀 해결해주세요 커피 값이라도 드려요 [10] | 지룡자 | 1328 | 01-12 |
배치파일에는 기본적으로 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
-------------------------------------------
물론 본문처럼 그냥 바로 실행시키고 탈출시켜도 되지만
그러면 "없다는 개념"을 인식 못하고 지나갈 수 있기 때문에
저런식으로 해주는게 좋습니다.