web-dev-qa-db-ja.com

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

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

これを実行したいのは、「set/P」コマンドスタイルを使用してバッチスクリプトでユーザー入力を取得したくないためです。また、検査する値が多数ある構成ファイルの読み取りと書き込みの解析を設定する必要があります。

実行可能プログラムを実行するときのWindowsの標準的な動作は、「exe」ファイルの場合、プログラムを独自のプロセスで開き、すぐにスクリプト/コマンドプロンプトに戻ることだと思います。 「bat」および「cmd」スクリプトファイルの場合、スクリプトを実行し、制御が最初のスクリプトまたはコマンドプロンプトに戻されるまで待機します。これは、少なくとも「CALL」コマンドを使用して他のスクリプトを呼び出す場合、または直接呼び出す場合の動作です。

Linuxでは、アンパサンド( "&")文字を指定しない限り、拡張子なしで提供できるネイティブマシンコードと "sh"ファイルなどのスクリプトの両方である実行可能コンテンツのデフォルトの動作は、ブロック方式で実行されると思います。入力行のどこかに。

そのため、Linuxでより簡単に実行できるため、Windowsでブロック動作を実現しようとしています。プログラムを閉じて元のスクリプトを続行するか、コマンドプロンプトに制御を戻したいと考えています。

4
Pysis

startコマンド/B /WAITスイッチの順序に注意)のいずれかを使用できます。

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

または単に

notepad.exe "somefile"

上記のリンクによると:

32ビットのグラフィカルユーザーインターフェイス(GUI)アプリケーションを実行する場合、cmdは、アプリケーションが終了するのを待たずに、コマンドプロンプトに戻ります。 コマンドスクリプトからアプリケーションを実行した場合、この動作は発生しません。

カランのコメントに関して編集なぜ/ Bが必要なのですか?

/Bは、新しいコマンドプロンプトウィンドウを開かずにアプリケーションを起動します。

  • 実を言うと、グラフィカルユーザーインターフェイスアプリケーションを実行すると、no新しいコマンドプロンプトウィンドウが開きます/Bスイッチが省略されていると思っても。
  • 一方、コマンドラインツールを実行する場合、/Bスイッチを省略すると、新しいコマンドプロンプトウィンドウでそのツールが実行されます終了後すぐに閉じ、すべての出力が失われます

したがって、私は一般原則として/B /WAITスイッチを一緒に使用します。開始されたプログラムの配置に関係なく同じ動作を維持し、それについて考える必要はありません。

/B /WAITスイッチの順序での補足StackOverflowからの例とその他のリンクを含むstart /WAIT /Bはありませんtは機能します(/wait引数は無視されます)が、start /B /WAITは機能します。

6
JosefZ
notepad.exe | echo > NUL

これは、notepad.exeを開き、そのすべての出力がコマンドecho > NULにリダイレクトされることを意味します。出力全体をリダイレクトするには、プログラムを終了する必要があります。したがって、notepad.exeが終了するまで待つ必要があります。出力はエコーになります。 Echoは入力をまったく使用せず、NULに何かを出力するだけです。 NULは、どこにも行かない標準のWindowsストリームです。

1
Valentin

質問を書いているとき、私が意図した正確な結果を達成していませんが、1つの答えが私に来ました。

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

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

0
Pysis

簡単な答えは、バッチスクリプトまたはプロンプトです。

cmd/c notepad.exe somefile

0
Vic