コマンドプロンプトでメモ帳などのアプリケーションを起動し、閉じられるまでブロックする

コマンドプロンプトでメモ帳などのアプリケーションを起動し、閉じられるまでブロックする

バッチ スクリプトがあり、基本的には、スクリプトを実行するたびにユーザーが編集できる構成ファイルが開かれたメモ帳ウィンドウをユーザーに表示し、コマンド プロンプトがこのプログラムが閉じられるまで待機して実行を続行し、この構成ファイルを使用するプログラムを実行するようにしたいと考えています。

これを実行する理由は、バッチ スクリプトで "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はアプリケーションが終了するまで待たずにコマンド プロンプトに戻ります。この動作は、コマンドスクリプトからアプリケーションを実行する場合には発生しません。

編集カラン氏のコメントに関して:/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 に送られます。echo は入力をまったく使用せず、単に NUL に何かを出力します。NUL はどこにも行かない標準の Windows ストリームです。

答え3

質問を書いているときに、1 つの答えが思い浮かびましたが、それは私が意図した結果を正確に達成したわけではありません。

開きたいプログラムを開いて、そのすぐ後に次の行の「一時停止」コマンドを追加します。これにより、ユーザーが表示された新しいプログラム ウィンドウを閉じるまでスクリプトの実行が一時停止され、その時点からスクリプトを手動で進める必要があることに気付くようになります。一時停止では、何が起こっているかを説明するプロンプトが出力され、ユーザーに通知される可能性があります (「Press any key to continue . . .」)。

何らかの理由でスクリプトが最小化され、ユーザーがスクリプトが終了したと確信しない限り、これは大きな問題ではありません。また、プログラムが閉じられたときにスクリプトの残りの部分の実行が自動的に再開されないため、これはあまり良いことではありません。これは私が望んでいる効果です。

答え4

Firefox を起動したときにうまくいった方法は次のとおりです。

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

関連情報