我想要一个可以与Task Scheduler一起使用的BAT程序,所以如果我打开“java.exe”,它将自行关闭。这可能吗?
谢谢!
答案 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内部的管道(" | ")需要进行转义 插入符号(" ^ ")。