명령 프롬프트에서 메모장과 같은 응용 프로그램을 실행하고 닫힐 때까지 차단하도록 합니다.

명령 프롬프트에서 메모장과 같은 응용 프로그램을 실행하고 닫힐 때까지 차단하도록 합니다.

나는 본질적으로 사용자가 스크립트를 실행할 때마다 편집할 수 있는 구성 파일이 포함된 메모장 창을 열어 사용자에게 표시하고 이 프로그램이 닫힐 때까지 명령 프롬프트가 대기하도록 하는 배치 스크립트를 가지고 있습니다. 실행하고 이 구성 파일을 사용하는 프로그램을 실행합니다.

"set /P" 명령 스타일을 사용하여 배치 스크립트에서 사용자 입력을 가져오고 싶지 않고 검사할 값이 많은 구성 파일에 대한 구문 분석 읽기 및 쓰기를 설정해야 하기 때문에 이 작업을 수행하고 싶습니다.

실행 가능한 프로그램을 실행할 때 Windows의 표준 동작은 "exe" 파일의 경우 자체 프로세스에서 프로그램을 열고 즉시 스크립트/명령 프롬프트로 다시 제어하는 ​​것입니다. "bat" 및 "cmd" 스크립트 파일의 경우 스크립트를 실행하고 제어가 첫 번째 스크립트 또는 명령 프롬프트로 다시 전달될 때까지 기다립니다. 최소한 "CALL" 명령으로 다른 스크립트를 호출하거나 직접 호출할 때의 동작이어야 합니다.

이제 Linux에서는 확장 없이 제공될 수 있는 기본 기계 코드와 "sh" 파일과 같은 스크립트인 실행 가능한 콘텐츠의 기본 동작이 앰퍼샌드("&") 문자를 지정하지 않는 한 차단 방식으로 실행된다고 생각합니다. 입력 라인 어딘가에 있습니다.

그래서 저는 Linux에서 더 쉽게 수행할 수 있는 Windows에서 차단 동작을 수행하려고 노력하고 있으며, 프로그램을 닫아 원래 스크립트를 계속 실행하거나 명령 프롬프트로 제어권을 되돌리길 원합니다.

답변1

다음 중 하나를 사용할 수 있습니다.start명령(스위치 순서 참고 /B /WAIT)

start "" /B /WAIT notepad.exe "somefile"

아니면 단순히

notepad.exe "somefile"

위 링크에 따르면:

32비트 그래픽 사용자 인터페이스( GUI) 응용 프로그램을 실행할 때 는 cmd명령 프롬프트로 돌아가기 전에 응용 프로그램이 종료될 때까지 기다리지 않습니다.명령 스크립트에서 애플리케이션을 실행하는 경우 이 동작이 발생하지 않습니다..

편집하다Karan의 의견과 관련하여 :/B가 필요한 이유는 무엇입니까?

/B새 명령 프롬프트 창을 열지 않고 응용 프로그램을 시작합니다.

  • 진실을 말하자면:그래픽 사용자 인터페이스 애플리케이션그 다음에아니요스위치가 생략된 경우에도 새 명령 프롬프트 창이 열립니다 /B.
  • 반면에 다음을 실행하면명령줄 도구, /B스위치를 생략하면 새 명령 프롬프트 창에서 해당 도구가 실행됩니다.즉시 문을 닫습니다그것이 끝난 후 그리고모든 출력이 손실됩니다..

/B /WAIT따라서 시작된 프로그램의 처리에 관계없이 동일한 동작을 유지하고 그것에 대해 생각하지 않는다는 일반적인 원칙으로 스위치를 함께 사용합니다 .

보충/B /WAIT스위치 순서대로StackOverflow의 예제와 추가 링크 포함: 작동하는 동안 start /WAIT /B작동하지 않습니다( /wait인수는 무시됩니다) start /B /WAIT...

답변2

notepad.exe | echo > NUL

이것이 하는 일은 notepad.exe를 열고 모든 출력이 명령으로 리디렉션되는 것입니다 echo > NUL. 전체 출력을 리디렉션하려면 프로그램을 종료해야 합니다. 따라서 notepad.exe가 완료될 때까지 기다려야 합니다. 출력은 에코로 이동합니다. Echo는 어떤 방식으로든 입력을 사용하지 않고 NUL로 무언가를 출력합니다. NUL은 아무데도 가지 않는 표준 Windows 스트림입니다.

답변3

질문을 쓰다보니, 제가 의도한 정확한 결과를 얻지는 못했지만, 한 가지 답변이 나왔습니다.

열려고 하는 프로그램을 열고 아래 줄에서 그 프로그램 바로 뒤에 "pause" 명령을 추가하는 것입니다. 사용자가 방금 나타난 새 프로그램 창을 닫을 때까지 스크립트 실행을 일시 중지하고 해당 지점부터 스크립트를 수동으로 진행해야 한다는 점을 인식해야 합니다. Pause는 잠재적으로 사용자에게 알리기 위해 무슨 일이 일어나고 있는지 설명하는 프롬프트를 인쇄합니다(" Press any key to continue . . .").

어떤 이유로든 스크립트가 최소화되고 사용자가 스크립트가 끝났다고 생각하지 않는 한 이는 큰 문제가 아닙니다. 또한 프로그램이 닫힐 때 나머지 스크립트 실행을 자동으로 재개하지 않기 때문에 좋지 않습니다. 이것이 제가 원하는 효과입니다.

답변4

Firefox를 시작할 때 저에게 도움이 된 내용은 다음과 같습니다.

start "" /B /WAIT "G:\Programs\Mozilla Firefox\firefox.exe" | pause

관련 정보