如何从批处理/ cmd文件中检查进程是否正在运行?如果进程正在运行,我该如何自动停止该进程?
像cmd脚本一样,有人可以给我一些提示或帮我制作那种脚本。
示例(伪代码):
If calc.exe is running
Stop calc.exe
我想要这样的事情:
@echo off
:x
PATH=C:\Windows\System32\calc.exe
If calc.exe is ON goto Process_Stop
:Process_Stop
net stop calc.exe
goto x
答案 0 :(得分:15)
首先,你有错误的命令来停止像calc.exe这样的进程。 NET STOP将停止服务,但不是正常的程序进程。你想要TASKKILL。
第二 - 如果你知道你想要杀死进程(如果它存在的话),那么为什么你认为你必须先检查它是否在你杀死它之前先运行?你可以简单地试图杀死这个过程。如果它不存在,则会生成错误,并且不会造成任何损害。如果确实存在,那么它会被成功消息杀死。
taskkill /im calc.exe
如果您不想看到错误消息,请使用2>nul
将stderr重定向到nul。如果您不想查看成功消息,请使用>nul
将stdout重定向到nul。
taskkill /im calc.exe >nul 2>nul
如果您想根据结果采取行动,那么您可以使用条件&&
和||
运算符来获得成功和失败。
taskkill /im calc.exe >nul 2>nul && (
echo calc.exe was killed
) || (
echo no process was killed
)
或者您可以使用ERRORLEVEL根据结果确定要做什么。
答案 1 :(得分:3)
更可读和更简单的命令是这样的:
taskkill / F / FI“IMAGENAME eq calc.exe”
如果进程未运行,则该方法永远不会返回错误代码,如果进程未运行,/ IM开关 将 返回错误。您还可以使用以下通配符:
taskkill / F / FI“IMAGENAME eq calc * .exe”可以杀死任何以'calc'开头并以名称中的'.exe'结尾的进程。
答案 2 :(得分:0)
签出tasklist命令 - 此命令提供正在运行的任务和服务的列表。检查您感兴趣的任务是否正在使用正则表达式
运行然后使用taskkill命令终止服务或任务。