/ WAIT 옵션을 사용하여 CALL 명령과 START


149

WAIT 옵션이있는 START 명령은 어떻습니까

START /wait notepad.exe 
START /wait  notepad.exe 

... CALL 명령을 사용하는 것과 다른 점이 있습니까?

CALL notepad.exe 
CALL notepad.exe 

실행되는 것에 따라 다른 것과 다르게 동작 할 수있는 상황이 있습니까?


답변:


183

의 경우 EXE 파일, 나는 차이가 거의 중요하지 않습니다 가정합니다.
그러나 exe 를 시작하기 위해 당신은 필요하지 않습니다 CALL.

또 다른 배치를 시작할 때 그것은 큰 차이점
으로 CALL같은 창에 시작하고 호출 된 배치가 같은 변수 컨텍스트에 액세스 할 수 있습니다.
따라서 호출자에게 영향을 미치는 변수를 변경할 수도 있습니다.

START호출 된 배치에 대해 새 cmd.exe를 작성하고 / b없이 새 창을 엽니 다.
새로운 맥락이므로 변수를 공유 할 수 없습니다.

차이점

사용start /wait <prog>
- <prog>종료시 환경 변수의 변경 사항이 유실 됨
-호출자 <prog>가 종료 될 때까지 대기

사용call <prog>
- 들어 exe를 그냥 시작 동등하게 있기 때문에, ommited 할 수 있습니다 <prog>
-를 들어 EXE-이 prog 발신자 배치 대기 또는 시작 exe 인 비동기하지만 동작은에 따라 exe를 자체.
- 배치 파일의 경우 호출자 <batch-file>가 종료되면 호출없이 제어가 호출자 일괄 처리로 돌아 가지 않습니다.

추가:

를 사용하면 CALL캐럿 또는 퍼센트 기호가 포함 된 경우에만 배치 및 exe 파일에 대한 매개 변수를 변경할 수 있습니다.

call myProg param1 param^^2 "param^3" %%path%%

(일괄 파일 내에서)로 확장됩니다

myProg param1 param2 param^^3 <content of path>

25
START / WAIT를 사용하여 file.bat를 실행할 때 START / WAIT "file.bat"대신 START / WAIT cmd / c "file.bat"를 지정해야합니다. 그렇지 않으면 file.bat에 대해 작성된 cmd 창이 열린 상태로 유지됩니다
FrinkTheBrave

5
: 당신은 CALL과 START 사이의 비교 찾을 수 있습니다 ss64.com/nt/start.html (섹션 "시작 / 대기"와 "CALL 대 START"와 업데이트 오늘)
알프레도 Capobianchi

나의 마음에 드는 것입니다 start /wait /b cmd /c <batchfile.bat>배치 파일이 같은 명령 창에서 다른 후 하나를 실행하기 때문에
linux64kb

@ linux64kb, 그러나 배치 파일은 필요하지 않습니다.call batchfile.bat
jeb

@jeb True. 각 배치 파일이 다른 명령 쉘 환경에서 실행되어 호출 쉘의 변수를 상속하고 배치가 완료 된 후 초기 값에 대한 변경 사항이 손실됩니다-> 각 연속 실행 후에 가비지가 남지 않기 때문에이 파일을 선호합니다. 또 다른 승리는 스크립트에서 변수 재설정을 처리 할 필요가 없다는 것입니다.
linux64kb

17

나는 그들이 일반적으로 똑같이 수행해야한다고 생각하지만 약간의 차이가 있습니다. START일반적으로 응용 프로그램을 시작하거나 지정된 파일 형식에 대한 기본 응용 프로그램을 시작하는 데 사용됩니다. 그렇게 START http://mywebsite.com하지 않으면 그렇게하십시오 START iexplore.exe http://mywebsite.com.

START myworddoc.docxMicrosoft Word를 시작하고 myworddoc.docx를 엽니 다. CALL myworddoc.docx똑같은 일을하지만 ... START창 상태와 그 성격에 대한 더 많은 옵션을 제공합니다. 또한 프로세스 우선 순위 및 선호도를 설정할 수 있습니다.

간단히 말해 start에서 제공하는 추가 옵션을 고려할 때 선택해야합니다.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.
path        Starting directory.
B           Start application without creating a new window. The
            application has ^C handling ignored. Unless the application
            enables ^C processing, ^Break is the only way to interrupt
            the application.
I           The new environment will be the original environment passed
            to the cmd.exe and not the current environment.
MIN         Start window minimized.
MAX         Start window maximized.
SEPARATE    Start 16-bit Windows program in separate memory space.
SHARED      Start 16-bit Windows program in shared memory space.
LOW         Start application in the IDLE priority class.
NORMAL      Start application in the NORMAL priority class.
HIGH        Start application in the HIGH priority class.
REALTIME    Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE        Specifies the preferred Non-Uniform Memory Architecture (NUMA)
            node as a decimal integer.
AFFINITY    Specifies the processor affinity mask as a hexadecimal number.
            The process is restricted to running on these processors.

            The affinity mask is interpreted differently when /AFFINITY and
            /NODE are combined.  Specify the affinity mask as if the NUMA
            node's processor mask is right shifted to begin at bit zero.
            The process is restricted to running on those processors in
            common between the specified affinity mask and the NUMA node.
            If no processors are in common, the process is restricted to
            running on the specified NUMA node.
WAIT        Start application and wait for it to terminate.


8

이것은 배치 파일을 병렬로 실행하는 동안 발견 한 것입니다 (다른 입력 매개 변수를 사용하여 동일한 bat 파일의 여러 인스턴스를 동시에).

LongRunningTask.exe라는 긴 작업을 수행하는 exe 파일이 있다고 가정하겠습니다.

bat 파일에서 직접 exe를 호출하면 LongRunningTask에 대한 첫 번째 호출 만 성공하지만 나머지는 "파일이 이미 프로세스에서 사용 중입니다"라는 오류가 발생합니다.

이 명령을 사용하는 경우 :

/ B / WAIT "" "LongRunningTask.exe" "parameters"시작

박쥐가 나머지 명령을 계속 실행하기 전에 작업이 끝날 때까지 기다리는 동안 박쥐와 exe의 여러 인스턴스를 실행할 수 있습니다. / B 옵션은 다른 창을 만드는 것을 피하기 위해 명령이 작동하려면 빈 따옴표가 필요합니다 (아래 참조 참조).

시작시 / WAIT를 사용하지 않으면 LongRunningTask가 배치 파일의 나머지 명령과 동시에 실행되므로 이러한 명령 중 하나에 LongRunningTask의 출력이 필요한 경우 문제가 발생할 수 있습니다.

재개 :

이것은 병렬로 실행할 수 없습니다 :

  • LongRunningTask.exe 호출

이것은 병렬로 실행되며 명령 출력과 나머지 bat 파일 사이에 데이터 종속성이없는 한 정상입니다.

  • / B "" "LongRunningTask.exe" "parameters"시작

병렬로 실행되고 작업이 완료 될 때까지 기다리므로 출력을 사용할 수 있습니다.

  • / B / WAIT "" "LongRunningTask.exe" "parameters"시작

시작 명령에 대한 참조 : 프로그램 시작 후 콘솔을 열어 두지 않고 배치 파일에서 프로그램을 어떻게 실행할 수 있습니까?


6

요구

부모 배치 프로그램을 중지하지 않고 다른 배치 프로그램을 호출 합니다. call 명령은 레이블을 호출 대상으로 승인합니다. 스크립트 나 배치 파일 외부에서 사용할 때는 명령 줄에서 호출이 적용되지 않습니다. https://technet.microsoft.com/en-us/library/bb490873.aspx

스타트

지정된 프로그램이나 명령을 실행하기 위해 별도의 명령 프롬프트 창 을 시작합니다 . 매개 변수없이 사용하면 start는 두 번째 명령 프롬프트 창을 엽니 다. https://technet.microsoft.com/en-us/library/bb491005.aspx


-1

이것은 오래된 스레드이지만 방금이 상황에 직면하여 깔끔한 방법을 발견했습니다. setup.exe를 실행하려고했지만 setup.exe가 완료 될 때까지 기다리지 않고 스크립트의 다음 줄로 포커스가 돌아가고있었습니다. 나는 위의 해결책을 운없이 시도했다.

결국, 더 많은 명령을 통해 파이프를 연결하는 것이 트릭이었습니다.

setup.exe {arguments} | 더

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.