2015-05-12 40 views
2

我想要一個BAT程序,我可以與任務計劃程序一起使用,所以如果我打開「java.exe」,它會自行關閉。這可能嗎?BAT關閉程序,如果另一個正在運行

謝謝!

+0

這是絕對有可能的。你試過什麼了? – SomethingDark

+0

我很新的.bat文件。 我只是知道如何改變顏色,打開程序,IPCONFIG,和那個級別的東西。 – JeffersonYu1

+1

我不會爲你寫代碼,但我會指出你在正確的方向。您可以使用'tasklist'來獲取當前正在運行的任務的列表,並且可以使用'find'來搜索特定字符串的文本塊。您可以使用'|'將一個命令的輸出用作另一個命令的輸入。您可以使用'exit'來結束當前正在運行的腳本。 – SomethingDark

回答

1

由於findstr在輸入中存在字符串時返回0,否則返回非零值,您可以在該命令的ERRORLEVEL上測試以確定程序是否正在運行。

tasklist | findstr /i "java.exe" > NUL 
if ERRORLEVEL 1 exit /b 1 
echo ...do something here ... 

您可以使用布爾運算符||將其壓縮到一行。

tasklist | findstr /i "java.exe" >NUL || exit /b 1 
echo ...do something here ... 

運行help findstr查看您可以給出的選項列表。如果你想要更精確的匹配,使「java.exe」與「notjava.exe」不匹配,你可以使用/B開關。

tasklist | findstr /i /b "java.exe" >NUL || exit /b 1 
echo ... do something here ... 

tasklist程序可以做自己的過濾,但你還是要貫穿findstr輸出,因爲某些原因tasklist似乎總是設置ERRORLEVEL爲0的輸出可能變化取決於計算機的本地化設置也是如此,所以它不像一個解決方案那樣靈活和通用。但在這裏,它是:

tasklist /fi "imagename eq iexplore.exe" | findstr "iexplore.exe" >NUL && echo the task is running 

如果你希望你的批處理文件停止其他正在運行的過程中,首先你會做上述選項之一,看看它是否正在運行,然後你會運行taskkill停止它。例如,

taskkill /im /t "java.exe" 

有關更多選項,請參閱taskkill /?。根據你的使用情況,您可以直接前往taskkill其過濾選項,像這樣:

taskkill /fi "imagename eq java.exe" 
+0

非常感謝!這工作! – JeffersonYu1

0

你可以試試這個批次是這樣的:

@echo off 
Set Process2Kill=java 
FOR /F "usebackq tokens=2" %%i IN (`tasklist ^| findstr /r /b "%Process2Kill%*[.]exe"`) DO taskkill /pid %%i 
pause 
  • 的command_to_process需要回引號(``)位於 命令的兩側。

  • 管道( 「| 」)的command_to_process內需要與 轉義插入符號(「 ^」)。

  • FOR /F documentation

  • Findstr documentation

相關問題