2012-05-11 7 views
1

私は、Javaアプリケーション用の小さなシャットダウンスクリプトを作成しています。私は、PIDを取得し、次の操作を行いますしよう:taskkill:異なる動作コンソール対スクリプト

taskkill /t /pid !pid! 

私は、コンソールからのコマンドを実行している場合は、すべてが正常に動作します(手で入力します)。私は、シャットダウンルーチンがJavaコンソールで実行されているのを確認し、その後、Javaコンソールは消えてしまいます。私はときどきウィンドウが "プロセスが反応しません。今すぐ殺すか待つ"ダイアログを数秒後に見ますが、ダイアログはJavaプログラムが停止すると自動的に閉じられます。

私が同じコマンドでバットファイルを実行すると、すぐに「プロセスが応答していません...」というダイアログが表示されます。コンソール出力が表示されます:「プロセスは正常に終了しましたが、Javaコンソールはまだ開いています。それはシャットダウンシーケンスを開始しませんでした。

編集:遅れ展開が無効になっているとのみ、レジストリEYまたはcmd /V:onを有効にすることができるように、コマンドライン!pid!で完全なバッチスクリプト

@echo off 
setlocal enabledelayedexpansion 
if exist .\lock (
set /p pid=< lock 
taskkill /t /pid !pid! 
) 
+0

後にあなたがそれを私たちにバッチスクリプトを示さなければならないエコーを追加する必要があります。 – adarshr

+0

が質問に追加されました。 – Nicolas

答えて

1

は、通常、拡張されません。

コマンドラインで!pid!は変更されず、バッチではpid変数の内容に展開されます。

編集 あなたはCMDライン上正しいコマンドを示しているように、バッチ内のコマンドが間違っている必要があります。

あなたはセット/ Pライン

Echo pid="!pid!" 
+0

コマンドラインで私はtaskkill/pid 1234のようなものを入力しました。 – Nicolas

+0

@nicolas私は答えを – jeb

+0

編集します。実行する2つのコマンドはまったく同じです。問題は次のとおりです。コマンドラインから直接実行されるコマンドは、スクリプトから実行されるコマンドとは少し異なります。異なるタイムアウト設定、別のスレッド、.... – Nicolas

関連する問題