我想要一个批处理程序,它将检查进程是否notepad.exe
存在。
如果 notepad.exe
存在,它将结束该过程,
否则批处理程序将自行关闭。
这是我所做的:
@echo off
tasklist /fi "imagename eq notepad.exe" > nul
if errorlevel 1 taskkill /f /im "notepad.exe"
exit
但它不起作用。我的代码有什么问题?
我想要一个批处理程序,它将检查进程是否notepad.exe
存在。
如果 notepad.exe
存在,它将结束该过程,
否则批处理程序将自行关闭。
这是我所做的:
@echo off
tasklist /fi "imagename eq notepad.exe" > nul
if errorlevel 1 taskkill /f /im "notepad.exe"
exit
但它不起作用。我的代码有什么问题?
TASKLIST
不设置错误级别。
echo off
tasklist /fi "imagename eq notepad.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "notepad.exe"
exit
应该完成这项工作,因为“:”TASKLIST
仅在未找到任务时才应出现在输出中,因此FIND
将错误级别设置为0
fornot found
和1
forfound
尽管如此,
taskkill /f /im "notepad.exe"
如果存在记事本任务,它将杀死它 - 如果不存在记事本任务,它什么也做不了,所以你真的不需要测试 - 除非你想做其他事情......也许
echo off
tasklist /fi "imagename eq notepad.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "notepad.exe"&exit
这似乎按照您的要求进行 - 如果记事本进程存在,则终止它,然后退出 - 否则继续批处理
这是一个单行解决方案。
只有当进程真正运行时它才会运行 taskkill,否则它只会显示它没有运行。
tasklist | find /i "notepad.exe" && taskkill /im notepad.exe /F || echo process "notepad.exe" not running.
这是进程运行时的输出:
notepad.exe 1960 Console 0 112,260 K
SUCCESS: The process "notepad.exe" with PID 1960 has been terminated.
这是未运行时的输出:
process "notepad.exe" not running.
TASKLIST
没有设置您可以在批处理文件中签入的退出代码。检查退出代码的一种解决方法是解析其标准输出(您目前正在重定向到NUL
)。显然,如果找到该进程,TASKLIST
将显示其详细信息,其中也包括图像名称。因此,您可以只使用FIND
orFINDSTR
来检查TASKLIST
的输出是否包含您在请求中指定的名称。如果搜索不成功,两者都FIND
设置FINDSTR
一个非空退出代码。所以,这会起作用:
@echo off
tasklist /fi "imagename eq notepad.exe" | find /i "notepad.exe" > nul
if not errorlevel 1 (taskkill /f /im "notepad.exe") else (
specific commands to perform if the process was not found
)
exit
还有一个完全不涉及的替代方案TASKLIST
。与, 不同TASKLIST
,TASKKILL
确实设置了退出代码。特别是,如果它无法终止进程,因为它根本不存在,它将设置退出代码 128。您可以检查该代码以执行您可能需要执行的特定操作,以防指定的进程不存在:
@echo off
taskkill /f /im "notepad.exe" > nul
if errorlevel 128 (
specific commands to perform if the process
was not terminated because it was not found
)
exit
这就是为什么它不起作用,因为您编写了一些不正确的代码,这就是为什么它总是退出并且脚本执行器会将其读取为不可操作的批处理文件,从而阻止它退出和停止,所以它必须是
tasklist /fi "IMAGENAME eq Notepad.exe" 2>NUL | find /I /N "Notepad.exe">NUL
if "%ERRORLEVEL%"=="0" (
msg * Program is running
goto Exit
)
else if "%ERRORLEVEL%"=="1" (
msg * Program is not running
goto Exit
)
而不是
@echo off
tasklist /fi "imagename eq notepad.exe" > nul
if errorlevel 1 taskkill /f /im "notepad.exe"
exit
试试这个:
@echo off
set run=
tasklist /fi "imagename eq notepad.exe" | find ":" > nul
if errorlevel 1 set run=yes
if "%run%"=="yes" echo notepad is running
if "%run%"=="" echo notepad is not running
pause