2010-09-25 04:19:24 +0000 2010-09-25 04:19:24 +0000
25
25

バッチファイルの実行後にcmdが終了しないのはなぜですか?

バッチファイルの実行後にcmdが終了しないのはなぜですか?

試してみました。

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit
``` と 


0x1& を試してみました。

回答 (11)

31
31
31
2010-09-25 07:28:36 +0000

Javaアプリが終了しない場合(バッチファイルを使用してJavaアプリを起動している場合など)、startコマンドを使用して起動します: -

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

これにより、javaアプリが起動し、javaアプリの終了を待たずにバッチファイルの実行を続行します。

20
20
20
2012-01-26 01:17:52 +0000

説明:

バッチファイルは一度に一行ずつ処理されます。各コマンドは順番に実行され、バッチプロセッサは次のコマンドを開始する前に1つのコマンドが終了するのを待ちます。あなたが経験している問題は、起動しているJavaアプリケーション(Jilko.jar)がウィンドウ型プログラムであり、起動した行の後も実行し続けているためです。もしそれが何らかのアクションを実行して終了するツールであれば、バッチファイルは次のコマンドに進みます(それ以上のコマンドがない場合は終了します)。プログラムはまだ実行中なので、バッチプロセッサはウィンドウが閉じるまで待ってから次のコマンドを実行します。Javaプログラムを終了すると、バッチファイルのあるコンソールウィンドウが閉じます。

解決方法:

この問題を解決するには、バッチプロセッサにプログラムを起動して待機せずに続行するように指示する必要があります。

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Terranceさんが言及されているのように、""はコンソールウィンドウに使用するタイトルです。startはコンソールウィンドウのタイトルになりますが、引用符で囲まれていない場合はオプションで、そうでない場合はrequiredになります。そうしないと、コマンドインタプリタは引用符で囲まれたコマンドをタイトルとして扱い、何かをするのを待っているだけのコンソールを開いてしまいます。

以下のようなコマンドを代わりに使うこともできますが、引用符を使った方が簡単で安全です。

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

start コマンドは、プロセスを起動する組み込みコマンドです(基本的にはスタートメニューからプログラムを実行するようなもの)。この場合、バッチプロセッサは/minコマンドを実行し、それによって指定されたプログラムが実行されて終了します(スポーンされたプログラムではなく、それ自体が終了します)。このようにして、バッチ処理は期待通りに続行されます。また、プログラムを最小化 (/max) または最大化 (/low) して実行したり、優先度を下げて実行したり (start /?) などの便利なオプションも用意されています。詳しくは 0x6& を参照してください。

7
7
7
2013-05-15 23:43:30 +0000

私が起動したプログラムのいくつかはプロセスを実行したままにしておき、実行ファイルを起動して実行するだけで終了するまでコンソールウィンドウが閉じないことに気がつきました。

STARTプログラムはそれを修正してくれますが、STARTの古い問題はまだ残っています。使うだけではダメなんですね。

START "c:\my dir\myfile.exe"

STARTの最初のパラメータはまだウィンドウ名です。これを省略すると、起動しようとしたウィンドウ名が何であれ、CMDコンソールボックスを開くことになります。上記の例では、"c:\my dirmyfile.exe“というウィンドウタイトルのコンソールウィンドウができました。望んでいたものではなかった。

ウィンドウ名を省略するには、二重引用符で空の文字列を定義してください。

START "" "c:\my dir\myfile.exe"

最後に、バッチファイルを確実に終了させるためにEXITコマンドで終了させます。

この方法はWindows 7と8で一貫して動作するようです。

トラブルシューティングでは、これから何をしようとしているかのエコーを追加してから、今やったことのTIMEOUTを追加すると非常に便利です。例:

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

タイムアウトはカウントダウンを与えてくれるので、遅延しようとしていることをエコーで知らせる必要はありません。

5
5
5
2012-01-26 00:59:18 +0000

また、Windows 7では、バッチファイルの最後に到達しただけでは、以前のWindowsバージョンのようにバッチファイルが終了するとは限らないため、常にEXITを使用してください。Windows 7は、以前のNTバージョン(例えばWindows 2000 Professional)に比べて、この問題に敏感になっているかもしれません。このことは、以前の回答の中のいくつかで言及されていますが、すべてではありません。

回答をサポートするための個人的な経験の詳細。

StarOffice5.2のインストールをWindows 2000からWindows 7に転送した後、スイートの終了時にメモリスペースエラーが発生しました。これはWindows 2000では見られませんでした。

何年も前に、soffice.iniが破損したとき(問題になるほどの頻度で、スイートの読み込みに失敗する)に修復できるように、自動的にバックアップと復元を行うためのバッチファイルを書いていました。自動バックアップ(バッチファイルへのリンクによってトリガーされ、Office52に配置された)は、しかし、約5秒の遅延の後にのみ発生します。私は、バッチファイルが実行される直前にスイートを終了するたびに、スイートの終了はエラーなしで行われたことに気づきました。これは、バッチファイルに問題があることを指摘しています。

‘EXIT’ コマンドをバッチファイルの最後の行として配置した後、バッチファイルが実行されたかどうかに関わらず、オフィススイートは常にメモリスペースのエラーメッセージなしで終了するようになりました。

2
2
2
2010-11-06 03:27:04 +0000

私はちょうど同じ問題に対処していたところで、バッチファイルをランダムに変更したように見えたのですが、最終的に解決しました。

私は SysInternals Pskill ユーティリティと sleep ユーティリティを使用しています。


これは実際に終了した後に閉じるバッチファイルです。

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit

最後の数行をこのように変更した場合、隅にある「X」をクリックするまでcmdウィンドウは開いたままになります:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit

pskillを起動して自滅させようとしても、cmd.exeプロセスはタスクマネージャから消え、pskillはcmd.exeプロセスの内部から報告します。 exeの中でcmd.exeプロセスが強制終了したことを報告しても、cmd.exeウィンドウは隅にある「X」をクリックするまで表示されたままでした:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

全ての行に&& exitを追加した後、それに反応してバッチ処理を中断するものとそうでないものがあることに気づきました。

そこで、元々持っていた方法ではなく、反応したもののうちの1つを最後に置いてみました。

さっきも言ったように、理由はわからないけど、これが終わってよかった。

2
2
2
2010-09-25 04:29:25 +0000

アプリが終了したら終了しているはずです。Javaアプリが正しく終了しているか?

1
1
1
2010-09-25 04:51:34 +0000

試してみてください。

cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

0
0
0
2015-10-16 12:53:17 +0000

Windows 2003はデフォルトでコントロールパネルに「ユーザーアカウント」がありません。ユーザーアカウントを開くための短いバッチを書いてみました。

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

それは正常に動作し、ユーザーアカウントは開きましたが、CMDウィンドウも開いたままでした。ここで調べた結果、2行目の先頭にSTART “"を追加してみました。

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

これで、ユーザーアカウントのウィンドウが開き、開いたままになり、CMD ウィンドウが閉じるようになりました。簡単です。

0
0
0
2016-01-01 06:06:20 +0000

私は、EXITコマンドが原因不明のウィンドウを開いたままにした場合にバッチファイルのウィンドウを閉じるための解決策をずっと探していました。ようやく解決策を見つけました。

バッチファイルの最後からEXITを削除して使用します。

Taskkill /IM conhost.exe /F
0
0
0
2016-07-15 10:37:30 +0000

Windows 7の32ビットマシンでネット使用のバッチファイルを作成しましたが、バッチファイルのcmdが実行後に終了しません。別のWindows 7の64ビットマシンで同じバッチファイルを実行すると、バッチファイルのcmdが正常に終了します。

Bryan’s suggestion を試してみましたが、そのWindows 7の32ビットマシンではconhost.exeプロセスが存在しないためうまくいきませんでしたので、以下のように修正しました。

Taskkill /IM cmd.exe /F

ネット使用のバッチファイルが常に正常に終了するとは限らず、"Terminate batch job (Y/N) “の確認がランダムに表示されます。

こちらの スレッド によると、バッチファイルを以下のように修正しました。

@echo off

if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

net use \Server\folder

Taskkill /IM cmd.exe /F

ネット使用のバッチファイルは最終的には正常に終了するようになりました。

0
0
0
2014-06-21 17:43:16 +0000

私がやった方法は以下の通りです。

1.以下の内容のバッチファイルを作成します。

  1. 2. 終了入力ストリームの中に、次のように追加します。