Ho 이전 명령을 성공적으로 실행한 후에만 명령을 실행해야 하는 배치 파일을 만들 수 있습니까?
답변1
성공이란 무엇을 의미하는지에 따라 다릅니다. foo.exe
아무것도 반환하지 않았 는지 확인하고 싶다면종료 코드0이 아닌 경우 다음을 사용하십시오.
@echo off
start /wait foo.exe
if errorlevel 0 (
start /wait bar.exe
)
반환된 종료 코드 bar.exe
후에 실행됩니다 . 테스트 중인 응용 프로그램이 데스크톱 응용 프로그램이 아닌 콘솔 응용 프로그램인 경우 생략할 수 있습니다 .foo.exe
0
start /wait
이에 대한 추가 정보:Windows 명령줄에서 애플리케이션 종료 코드를 어떻게 얻나요?, 님의 답변에서사무엘 렌커트그리고게리.
답변2
Hex가 게시하고 Michael의 의견으로 개선된 오류 수준 솔루션 외에도
이것은 당신이 하고 싶은 일을 하는 데 훨씬 더 빠릅니다.
첫 번째 명령 && 두 번째 명령
두 번째 명령은 첫 번째 명령이 성공한 경우에만 실행됩니다. 즉, 첫 번째 명령이 오류를 반환하지 않은 경우입니다.
아래 예에서 dir asfsds는 해당 출력을 반환하지만 오류도 반환합니다.
dir asdfsss & blah를 수행하면 첫 번째 명령(dir sdsdf)이 오류를 반환했는지 여부에 관계없이 blah가 실행됩니다.
그러나 사이에 &&를 사용하여 실행하면 첫 번째 오류가 발생하면 두 번째는 실행되지 않습니다. 이는 부울 대수학 개념을 기반으로 합니다. A가 참이고 B가 참이면 A AND B가 참입니다. 따라서 A와 B가 참인지 확인하려면 A와 B를 확인하거나 "게으르거나" 효율적일 수 있습니다. 하나만 확인하고 그것이 거짓이면 전체 표현식이 거짓임을 알 수 있습니다. 그리고 그것이 사실이라면 서로를 확인해야합니다. 따라서 A && B는 A를 확인하고 B를 확인해야 하는 경우에만 B를 확인하므로 B가 참인 경우에만 B를 확인합니다. 그러나 해당 부울 대수 개념은 명령에 적용되므로 첫 번째 명령을 실행하고 첫 번째 명령은 오류를 반환할 수도 있고 그렇지 않을 수도 있으며, 첫 번째 명령이 오류를 반환하면 두 번째 명령을 실행하고 체크인하지 않습니다. 첫 번째 오류가 오류를 반환하지 않으면 두 번째 오류를 시도합니다. 의심할 바 없이 표현식 자체는 둘 다 참이면 참(오류 없음)을 반환하고 그렇지 않으면 거짓(오류)을 반환할 것입니다.
C:\Users\user>dir asdfsdf
C 드라이브의 볼륨에 레이블이 없습니다. 볼륨 일련 번호는 B411-D580입니다.C:\Users\user 디렉토리
파일을 찾을 수 없음 <---------------- 위의 dir asdfdsds 출력을 참조하세요.
C:\Users\user>dir asdfsdf & echo
C 드라이브의 볼륨에 레이블이 없습니다. 볼륨 일련 번호는 B411-D580입니다.C:\Users\user 디렉토리
파일을 찾을 수 없음 a <--- 'echo a' 실행을 참조하세요.
C:\Users\user>dir asdfsdf && echo
C 드라이브의 볼륨에는 레이블이 없습니다. 볼륨 일련 번호는 B411-D580입니다.C:\Users\user 디렉토리
파일을 찾을 수 없음
C:\사용자\사용자>
dir filethatexists && echo a를 수행한 경우 첫 번째 명령이 성공적으로 실행된 다음 echo a가 실행되는 것을 볼 수 있습니다. 마찬가지로 echo a && echo b