2012-05-11 33 views
1

我正在爲java應用程序編寫一個小關機腳本。我得到的PID,然後嘗試做到以下幾點:taskkill:不同的行爲控制檯與腳本

taskkill /t /pid !pid! 

如果我從控制檯運行的命令(手動輸入它)一切工作正常。我看到在java控制檯中正在執行的關機例程,然後java控制檯消失了。我有時會在幾秒鐘後看到窗口「進程沒有響應,立即停止或等待」對話框,但是當java程序停止時,對話框會自動關閉。

如果我用相同的命令執行bat文件,我立即看到「Process not responding ...」對話框。我看到控制檯輸出:「進程已成功關閉」,但java控制檯仍處於打開狀態。它甚至沒有啓動關機程序。

編輯:完整的批處理腳本

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

你必須向我們展示了批處理腳本,然後後面加一個迴音。 – adarshr

+0

將其添加到問題中。 – Nicolas

回答

1

在命令行!pid!通常不會擴大,因爲延遲擴展是禁用的,並且只能通過註冊表EY或cmd /V:on啓用。

因此,在命令行!pid!將保持不變,並在批處理中將其擴展爲pid變量的內容。

編輯 當你顯示出對CMD線正確命令,在批處理命令一定是錯誤的。

你應該設定/ P線

Echo pid="!pid!" 
+0

當然。在命令行中,我輸入了類似taskkill/pid 1234的東西。 – Nicolas

+0

@nicolas我編輯答案 – jeb

+0

我運行的兩個命令完全相同。問題是:是否有可能從命令行直接運行的命令與從腳本運行的命令有所不同。不同的超時設置,另一個線程.... – Nicolas

相關問題