PDA

Показать полную графическую версию : [решено] Помогите с написанием bat файла для проверки запущенного процесса.


Stranger404
26-03-2009, 11:40
При автозагрузке запускается процесс xxx.exe
Пользователь может закрыть этот процесс, случайно или специально.
Можно ли написать пакетный файл, чтобы каждые n минут проверял наличие этого процесса и в случпе его отсутствия запускал его по новой?

Petya V4sechkin
26-03-2009, 12:08
Stranger404, пример для блокнота:
@Echo Off
SetLocal EnableExtensions

Set ProcessName=notepad.exe
TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% NEQ 0 Start %windir%\%ProcessName%

Скрипт добавить в Планировщик заданий.

Stranger404
26-03-2009, 12:21
Спасибо!

gora
26-03-2009, 12:36
Stranger404, учтите, что предложенный выше скрипт зависим от версии Windows и на Windows XP Home, например, работать не будет (tasklist.exe в ней отсутствует). :(

Petya V4sechkin
26-03-2009, 12:41
Тогда можно VBS-скриптом:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery( _
"Select Name From Win32_Process " _
& "Where Name = 'notepad.exe'")

If colProcesses.Count = 0 Then
Set objShell = Wscript.CreateObject("Wscript.Shell")
objShell.Run "notepad.exe"
End If

Stranger404
26-03-2009, 12:48
Спасибо, мне первый подошел отлично.
VBS как запасной вариант)

Fresh96
20-05-2009, 01:01
не уверен, но кажется проблема похожая...

ПРОБЛЕМА (http://forum.oszone.net/post-1122841-32.html).

может как то можно решить с помощью bat/cmd.

Mishechka
16-08-2011, 15:43
Petya V4sechkin,

В конце установки ОС Windows 7 появляется сообщение о том, что идёт настройка рабочего стола и через какое-то время появляется рабочий стол. Мне нужно после загрузки рабочего стола запустить reg-файл. Могу ли ипользовать Ваш код для этого?

Как-то так:

@Echo Off
SetLocal EnableExtensions

Set ProcessName=explorer.exe
TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% NEQ 1 start /wait regedit /s %DiskRoot%\Win7ProSP1\Install\hkcu.reg

Я в этом не разбираюсь, поэтому не знаю правильно ли я навоял.

Спасибо.

sov44
24-11-2011, 17:48
Подскажите, как правильно написать поиск и убийство процесса без вывода в командную строку служебных сообщений.
Без 1>Nul 2>nul процесс убивается, но выводятся служебные сообщения.
С 1>Nul 2>nul процесс не убивается, зато и сообщений нет.

@Echo Off
SetLocal enabledelayedexpansion

set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"

for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.*" 2^>nul') do (
1>Nul 2>nul tasklist|findstr /bic:"winword.exe"&&(taskkill /F /IM winword.exe&echo Word закрыт принудительно)
)
pause

Iska
24-11-2011, 19:12
sov44, попробуйте так:
for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.*" 2^>nul') do (
1>Nul tasklist /nh |findstr /bic:"winword.exe"&&(taskkill /F /IM winword.exe&echo Word закрыт принудительно)
)

sov44
24-11-2011, 19:16
sov44, попробуйте так: »
Iska, к сожалению процесс не убивается.

Iska
24-11-2011, 21:18
sov44, а что и почему Вы ищите в «%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word»?

sov44
24-11-2011, 21:41
sov44, а что и почему Вы ищите в «%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word»? »
это один из путей по очистке системы от мусора

Iska
24-11-2011, 22:57
Ну, и…? У меня, например, нет такой папки вовсе. Отчего ж будут запускаться вложенные команды:
1>nul tasklist /nh |findstr /bic:"winword.exe"&& ( echo taskkill /F /IM "winword.exe" & echo Word закрыт принудительно)
?

Далее, допустим, такая папка есть. Допустим, в ней есть какие-то файлы. Вывод:
dir /b/a-d "%dr%\*.*" 2>nul
будет не пустой. И зачем надо снимать все экземпляры Word, если неизвестно, заблокированы ли эти файлы этими экземплярами Word'а?

Мой Вам совет: плюньте и просто удаляйте файлы из этой папки, если она есть, не взирая на ошибки при удалении заблокированных файлов. Не удалите их в этот раз — удалите в следующий.

sov44
24-11-2011, 23:30
У меня, например, нет такой папки вовсе. »
У меня есть ( Windows XP SP3\Office 2010) :)
Iska, при всём уважении, мы отошли от решения проблемы

Iska
25-11-2011, 00:56
Проблема? Как можно решить то, чего нет?!

Я задал не один вопрос.

sov44
25-11-2011, 11:06
Решение подсказали на другом форуме.

@echo off
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"

for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.*" 2^>nul') do (
tasklist 2>nul|findstr /bic:"winword.exe" 1>nul 2>nul&&(taskkill /F /IM winword.exe 1>nul 2>nul&echo winword.exe закрыт принудительно)
)
pause

cheloveshka
17-08-2020, 22:50
Я извиняюсь за глупые вопросы, но не смог понять, как сделать так, чтобы определять:
Если запущено больше одного экзешника программы, то ничего не делать?
Как это понимаю я:

echo off
SetLocal EnableExtensions
Set ProcessName=someprogram.exe

TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% GTR 1 goto :exit
)Else(
rem много строчек основного кода
@echo Выполняю логику батника
)
:exit
exit >nul

А вообще в данном контексте Else можно не использовать?




© OSzone.net 2001-2012