Показать полную графическую версию : [решено] Помогите с написанием 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
Спасибо!
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 как запасной вариант)
не уверен, но кажется проблема похожая...
ПРОБЛЕМА (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
Я в этом не разбираюсь, поэтому не знаю правильно ли я навоял.
Спасибо.
Подскажите, как правильно написать поиск и убийство процесса без вывода в командную строку служебных сообщений.
Без 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
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, попробуйте так: »
Iska, к сожалению процесс не убивается.
sov44, а что и почему Вы ищите в «%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word»?
sov44, а что и почему Вы ищите в «%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word»? »
это один из путей по очистке системы от мусора
Ну, и…? У меня, например, нет такой папки вовсе. Отчего ж будут запускаться вложенные команды:
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'а?
Мой Вам совет: плюньте и просто удаляйте файлы из этой папки, если она есть, не взирая на ошибки при удалении заблокированных файлов. Не удалите их в этот раз — удалите в следующий.
У меня, например, нет такой папки вовсе. »
У меня есть ( Windows XP SP3\Office 2010) :)
Iska, при всём уважении, мы отошли от решения проблемы
Проблема? Как можно решить то, чего нет?!
Я задал не один вопрос.
Решение подсказали на другом форуме.
@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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.