다른 것 또는 프롬프트에서 Windows 배치 파일을 호출하는 여러 가지 방법. 어떤 경우에?


92

Windows 배치 파일 ( called.bat또는 called.cmd)은 다른 배치 파일 ( caller.bat또는 caller.cmd)이나 대화 형 cmd.exe 프롬프트에서 여러 가지 방법 으로 호출 할 수 있습니다 .

  1. 직접 전화 : called.bat
  2. 호출 명령 사용 : call called.bat
  3. cmd 명령 사용 : cmd /c called.bat
  4. 시작 명령 사용 : start called.bat

도움말 텍스트에 따라 의도 한 사용법을 구분하는 데 어려움이 있습니다. 언제 어떤 것을 사용해야합니까? 예를 들어 직접 호출 대신 '호출'명령을 사용하는 이유. 무엇이 다른가요?

다양한 관점에서 4 가지 가능성 (및 누락 된 경우 다른 항목)을 모두 분석하는 요약 보고서에 관심이 있습니다. 적합하도록 설계된 권장 사용 사례, 프로세스 생성, 실행 컨텍스트, 환경, 리턴 코드 처리.

참고 : Windows XP SP3을 사용하고 있습니다.

답변:


101
  1. 배치 파일은 현재 cmd.exe 인스턴스 (예를 들어 Explorer에서 두 번 클릭 한 경우 새 cmd.exe 인스턴스)에 의해 실행됩니다.

  2. # 1과 동일하며 배치 / cmd 파일 내에서 사용될 때만 효과가 있습니다. 배치 파일에서 '호출'이 없으면 상위 배치 파일이 종료되고 제어가 호출 된 배치 파일로 전달됩니다. with 'call'은 자식 배치 파일을 실행하고 부모 배치 파일은 호출 후 문으로 계속됩니다.

  3. 새 cmd.exe 인스턴스에서 배치 파일을 실행합니다.

  4. Start는 새 창에서 새 cmd.exe 인스턴스의 배치 파일을 실행하고 호출자는 완료를 기다리지 않습니다.


7
옵션 4의 경우 시작 명령 뒤에 항상 'title'이 와야합니다. 따라서 제목이 필요하지 않으면 빈 큰 따옴표를 사용해야합니다. 예start "" [options] command
Daryn

@Daryn that link는 단순히 항상 하나를 가져야한다고 언급하지만 Microsoft는 매개 변수를 선택 사항으로 설명한다고 말합니다. 그들은 왜 그것이 "필수적"이어야하는지 말해주지 않습니다. 맨 아래에있는 몇 가지 예제조차도 제목 매개 변수를 생략합니다.
아담 Plocher

5

여기 주석에서 명확하지 않은 한 가지는 이름 만 사용하여 다른 배치 파일을 호출하면 (원래 질문의 사례 # 1) 호출하는 배치 파일에서 실행 이 중지 됩니다. 예를 들어, 다음 줄에서 :

called.bat
echo Hello

'echo Hello'라인 (및 그 뒤에 오는 모든 항목)은 호출되지 않습니다. 'call'키워드를 사용하면 호출 후 실행이 재개됩니다. 따라서이 경우 :

call called.bat
echo Hello

'echo Hello'라인이 호출됩니다.

또한 called.bat 파일에 설정된 모든 변수도 호출 프로세스로 다시 전달됩니다.

다음 줄이있는 'called.bat'파일을 상상해보세요.

set MYVAR=hello

그런 다음 % MYVAR %는 다음을 사용하는 경우 호출 배치 파일에서 사용할 수 있습니다.

call called.bat

그러나, 그것은 사용하지 않을 것입니다

REM starts a new cmd.exe process
start called.bat   

REM stops and replaces current cmd.exe process with a new one
called.bat        
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.