如果另一个正在运行,BAT关闭程序

时间:2015-05-12 01:02:56

标签: batch-file task

我想要一个可以与Task Scheduler一起使用的BAT程序,所以如果我打开“java.exe”,它将自行关闭。这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果输入中存在字符串,则findstr返回0,否则返回非{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"与#34; notjava.exe"不匹配,您可以使用/B开关。

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

tasklist程序可以自行进行过滤,但是您仍需要通过findstr运行输出,因为出于某种原因,tasklist似乎始终将ERRORLEVEL设置为输出可能会根据计算机的本地化设置而改变,因此它不像解决方案那样灵活和通用。但这是:

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" 

答案 1 :(得分: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