Как я могу создать пакетный файл, который постоянно проверяет, открыта ли программа, а если нет, запустите ее свернутым

#batch-file

#пакетный файл

Вопрос:

Я довольно новичок в кодировании и пакетных файлах, так что будьте со мной откровенны.

Программа, которую я хочу запустить таким образом, — это opera. Но пакетный файл, похоже, не находит его. Вот как далеко я продвинулся:

 tasklist /FI "opera.exe" 2gt;NUL | find /I /N "opera.exe"gt;NUL if NOT "%ERRORLEVEL%" == "0" start "" "C:UsersleonvAppDataLocalProgramsOpera.exe" PAUSE   

Ответ №1:

Я бы проверил проверку, просто немного дальше. Я бы посмотрел ImageName , возвращается ли значение Opera.exe , с помощью Status которого Running и для текущего UserName :

 @%SystemRoot%System32tasklist.exe /Fi "Status Eq Running" /Fi "ImageName Eq Opera.exe" /Fi "UserName Eq %UserDomain%%UserName%" | %SystemRoot%System32find.exe "=" @If ErrorLevel 1 Start "" /Min "%LocalAppData%ProgramsOpera.exe"  

Ответ №2:

Вам нужно указать IMAGENAME eq processname , как:

 tasklist /fi "IMAGENAME eq opera.exe"  

Кроме того, нет необходимости запускать if операторы, вы можете использовать условные операторы amp;amp; и ||

 (tasklist /fi "IMAGENAME eq opera.exe"| findstr /I "opera.exe")gt;nul amp;amp; echo It's running || start "" "%LocalAppData%ProgramsOpera.exe"  

и запускать его в цикле, проверяя каждые N секунд:

 @echo of :loop (tasklist /fi "IMAGENAME eq opera.exe"| findstr /I "opera.exe")gt;nul amp;amp; echo It's running || start "" "%LocalAppData%ProgramsOpera.exe" timeout /t 20 goto :loop