Windows 배치 파일 ( called.bat
또는 called.cmd
)은 다른 배치 파일 ( caller.bat
또는 caller.cmd
)이나 대화 형 cmd.exe 프롬프트에서 여러 가지 방법 으로 호출 할 수 있습니다 .
- 직접 전화 :
called.bat
- 호출 명령 사용 :
call called.bat
- cmd 명령 사용 :
cmd /c called.bat
- 시작 명령 사용 :
start called.bat
도움말 텍스트에 따라 의도 한 사용법을 구분하는 데 어려움이 있습니다. 언제 어떤 것을 사용해야합니까? 예를 들어 직접 호출 대신 ‘호출’명령을 사용하는 이유. 무엇이 다른가요?
다양한 관점에서 4 가지 가능성 (및 누락 된 경우 다른 항목)을 모두 분석하는 요약 보고서에 관심이 있습니다. 적합하도록 설계된 권장 사용 사례, 프로세스 생성, 실행 컨텍스트, 환경, 리턴 코드 처리.
참고 : Windows XP SP3을 사용하고 있습니다.
답변
-
배치 파일은 현재 cmd.exe 인스턴스 (예를 들어 Explorer에서 두 번 클릭 한 경우 새 cmd.exe 인스턴스)에 의해 실행됩니다.
-
# 1과 동일하며 배치 / cmd 파일 내에서 사용될 때만 효과가 있습니다. 배치 파일에서 ‘호출’이 없으면 상위 배치 파일이 종료되고 제어가 호출 된 배치 파일로 전달됩니다. with ‘call’은 자식 배치 파일을 실행하고 부모 배치 파일은 호출 후 문으로 계속됩니다.
-
새 cmd.exe 인스턴스에서 배치 파일을 실행합니다.
-
Start는 새 창에서 새 cmd.exe 인스턴스의 배치 파일을 실행하고 호출자는 완료를 기다리지 않습니다.
답변
여기 주석에서 명확하지 않은 한 가지는 이름 만 사용하여 다른 배치 파일을 호출하면 (원래 질문의 사례 # 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