2011-07-04 15:32:05 +0000 2011-07-04 15:32:05 +0000
56
56

コマンドプロンプトが実行後に閉じないようにするには?

私の問題は、Windowsではコマンドラインのウィンドウが実行後すぐに閉じてしまうことです。これを解決するには、デフォルトの動作でウィンドウを開いたままにしておきたいのです。通常、この動作を回避するには、以下の3つの方法が考えられます。バッチプログラムの後に を終了する前にキーを押すように促すために pause の行を入れる 2. これらのバッチファイルや他のコマンドライン操作ツールを net start xy(Start - Run - cmd.exe) の中で実行すること 3. このように cmd.exe でこれらのプログラムを実行しています: cmd /k

しかし、他にもいくつかのケースがあります:

  1. プログラムを初めて実行し、与えられたプログラムがコマンドプロンプト(Windows コマンドプロセッサ)で実行されることを知りません、例えば、スタートメニュー(またはどこか他の場所から)からショートカットを実行しているとき、または
  2. cmd.exeを常に実行するのは少し不愉快だと感じています _そして、これらのコマンドの後に一時停止を入れたり、明示的に終了するのを避けるために、これらのコマンドのコードを至る所で書き換える時間と機会がありません。 aspx)を作成して、その内容を以下の場所で操作しています:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun

(AutoRunの項目はcmd /k myprogram.batです…)

試しにcmd.exeを値として入れてみましたが、上記のものの挙動は全く変わりませんでした…。ただ、コマンドラインウィンドウを明示的に開いたとき(Start-Run-cmd.exe)の挙動が変わっただけです。

では、どのように動作するのでしょうか?この問題を解決するために何かアイデアがあれば教えてください。

回答 (11)

18
18
18
2011-07-04 17:45:20 +0000

引用 Microsoft :

コンソールは、それに接続されている最後のプロセスが終了するか、FreeConsoleを呼び出すときに閉じられます。

言い換えれば、Win32のコンソールウィンドウは、その中で実行されている最後のプログラムが終了するときに常に閉じられ、これを変更することはできません。


(16ビットのMS-DOSプログラムの場合、Windowsはプロパティダイアログで「終了時に閉じる」というオプションを提供していますが、これは上記の動作の例外ではありません: ウィンドウを開いたままにしておくのはNTVDMプロセスです。また、このオプションもプログラムごとに設定されています)

8
8
8
2013-03-21 14:10:13 +0000

バッチファイルの場所でコマンドプロンプトを開き、手動でバッチファイル名を入力してウィンドウ内で実行してください。

1.実行ファイルがあるフォルダに移動してください。

4
4
4
2012-11-06 13:37:01 +0000

cmd.exe /kを使うと、いくつかのバッチでトラブルが発生します。バッチが exit 1 (/B なし) の場合、コンソールは閉じられてしまいます。これをすべてのバッチファイルでデフォルトで使用するには、

cmd.exe /k cmd /c ...

HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default)HKEY_CLASSES_ROOT\batfile\shell\open\command\(default) に設定してください。

3
3
3
2014-04-26 16:55:23 +0000

私の場合は、職場のコンソール環境を設定していたので、より合理的な解決策はすべてブロックされていました。私が必要としているのは、PATHを設定し、いくつかのDOSKEYエイリアスを設定して、シェルにダンプされるようにすることです。

私の解決策(Win7でテストしたところ)は、バッチファイルの最後の行にgrawityを追加することです。これにより、親の環境を継承する入れ子のコマンドプロンプトが実行されます。この子シェルは、バッチプロセスをEXITするまで開いたままにしておきます。

2
2
2
2015-12-11 17:02:56 +0000

あなたがそれらの実行可能な終了があったらそれ自身のインスタンスで起動し、開いたままにしておきたいと思う2つのバッチファイルを持っていると仮定して下さい。この2つのバッチファイルをA.batB.batと呼んでみましょう。

今、簡単にするために、両方を起動するバッチファイルを持つことができます。それはテストが必要になります。

2
2
2
2013-03-21 20:02:36 +0000

必要に応じてpauseを使うよりも(私はpauseを使うよりもchoiceやtimeoutの方が好きです)、こちらの解決策を使えばいいのです。この方法では、Windows のエクスプローラからバッチファイルやリンク(ショートカット)をクリックすると、終了する前にバッチファイルプログラムを一時停止させて、プログラムの出力やエラーメッセージを見ることができます。また、TIMEOUT を使用すると、時間遅延後にウィンドウを閉じることができます(無人)。コマンドプロンプトウィンドウからバッチファイルを実行した場合、これらの一時停止は煩わしいものになります。

あなたは、提供されたリンクで詳細を読むことができますが、それの基本は、それが環境変数を使用しているということです:バッチファイルがコマンドウィンドウから実行されたかどうかを決定するために&002&002&001&002&002:&002&002 だから、あなたはこのようにそれを使用しています:&002&002 バッチファイルが終了するポイントでは、このようないくつかのコードを追加します:&002&002&001

1
1
1
2013-03-12 15:30:15 +0000

あなたは通常go.batと呼ばれるファイルを実行している場合、あなたはgo2.bat

のような名前の何かという名前の2番目のバッチファイルを作成しますので、

… go2.batの内容はちょうど

start go.bat

…最初のウィンドウはすぐに閉じますが、あなたのgo.batを実行しているものは開いたままになります。

1
1
1
2013-09-24 12:30:12 +0000

これはWindowsレジストリエディタのバージョン5.00で動作します。

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
@="cmd.exe /k \"%1\" %*"

[HKEY_CLASSES_ROOT\cmdfile\shell\open\command]
@="cmd.exe /k \"%1\" %*"

上記のcmdsをcmdbatfile-open.regのようなファイルに保存して実行してください。

0
0
0
2017-03-30 08:30:11 +0000

Windows 10をお使いの方は、上記の回答のどれも現在のところWindows 10では動作しませんのでご注意ください。

Windows 10の場合、スクリプトにアクセスできる場合は、最後に次のコードを追加する必要があります。

0
0
0
2019-12-31 21:58:53 +0000

このOPの質問は私が必要としていたものよりもはるかに複雑なものなので、この回答はコマンドラインプログラムを起動し、コマンドラインプログラムが終了した後もウィンドウを開いたままにする簡単な方法を探している他の人のためのものです。

File: RunNodeJS.bat

@echo off
cd /d c:\
cmd.exe /k cmd /c node

私は、デスクトップにそのファイルのショートカットを作成し、そのショートカットをダブルクリックして、ノードコマンドを実行し、それ(ノードコマンド)が終了した後に開いたままにしておくcmd.exeコンソールを起動しました。

0
0
0
2017-06-30 03:30:27 +0000

ダウングレードされたPSIXOに対して - “この回答はすでに質問で取り上げられていました。- Ro Yo Mi Jan 20 ‘16 at 5:06” – NO, NOT. 以前の回答は “pause"、これはうまくいきませんでした。PSIXOさんの回答は "と一時停止しています。ダウングレードする前にもっと注意深く解析してください。私はこれをidleプロンプトから実行し、それが動作しました:

>>> os.system('dir ^ & pause')
    0
    >>>

一方で:

>>> os.system('dir ^ pause')
    1
    >>>

Did NOT work (cmdプロンプトが反転し、実際にはエラー(1)を返しました)。私が必要とした答えのためのPSIXOに感謝します。ヘンリー。