如何制作一个批处理文件来不断检查程序是不是打开,如果没有,则将其最小化

Posted

技术标签:

【中文标题】如何制作一个批处理文件来不断检查程序是不是打开,如果没有,则将其最小化【英文标题】:How can I make a batchfile that constantly checks if a program is open and if it is not, start it minimized如何制作一个批处理文件来不断检查程序是否打开,如果没有,则将其最小化 【发布时间】:2022-01-13 07:46:17 【问题描述】:

我对编码和批处理文件相当陌生,所以对我来说很简单。

我想以这种方式启动的程序是歌剧。但是批处理文件似乎没有找到它。这是我走了多远:

tasklist /FI "opera.exe" 2>NUL | find /I /N "opera.exe">NUL
if NOT "%ERRORLEVEL%" == "0" start "" "C:\Users\leonv\AppData\Local\Programs\Opera.exe"
PAUSE 

【问题讨论】:

【参考方案1】:

您需要指定IMAGENAME eq processname 喜欢:

tasklist /fi "IMAGENAME eq opera.exe"

另外,不需要运行if语句,可以使用条件运算符&&||

(tasklist /fi "IMAGENAME eq opera.exe"| findstr /I "opera.exe")>nul && echo It's running || start "" "%LocalAppData%\Programs\Opera.exe"

并在循环中运行它,每 N 秒检查一次:

@echo of
:loop
(tasklist /fi "IMAGENAME eq opera.exe"| findstr /I "opera.exe")>nul && echo It's running || start "" "%LocalAppData%\Programs\Opera.exe"
timeout /t 20
goto :loop

【讨论】:

【参考方案2】:

我会进一步检查验证。我会查看是否返回了Opera.exeImageName,以及RunningStatus,以及当前的UserName

@%SystemRoot%\System32\tasklist.exe /Fi "Status Eq Running" /Fi "ImageName Eq Opera.exe" /Fi "UserName Eq %UserDomain%\%UserName%" | %SystemRoot%\System32\find.exe "="
@If ErrorLevel 1 Start "" /Min "%LocalAppData%\Programs\Opera.exe"

【讨论】:

以上是关于如何制作一个批处理文件来不断检查程序是不是打开,如果没有,则将其最小化的主要内容,如果未能解决你的问题,请参考以下文章

如何检查端口是不是在带有批处理文件且没有第三方软件的远程服务器上打开? [关闭]

不断检查子弹是不是触及节点

如何创建一个批处理文件来检查文件夹中是不是存在四个特定的文件/文件夹?

在调用 presentOpenInMenuFromRect 之前检查它是不是存在可以打开文件的应用程序

如何制作一个批处理文件来 ping 多台取决于用户输入的计算机?

在VC里如何检查一个文件是不是存在