Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] мониторинг пинга+выполнение команды после завершения процесса (http://forum.oszone.net/showthread.php?t=324622)

sergeybutakov 10-03-2017 08:06 2718070

мониторинг пинга+выполнение команды после завершения процесса
 
Здравствуйте, мне нужно решить одну задачу:
При потере пинга, нужно выполнить команду удаления из папки, и это уже есть (нашел тут на форуме, за что огромное спс). Но перед удалением мне надо чтобы батник убедился, что определенны процесс завершен. Думаю объяснил нормально что мне нужно, проще говоря совместить грамотно два батника. Призываю овеликих к помощи плз
Спасибо всем за отклик

вот батник, который удаляет при потере пинга:
Код:

@echo off

setlocal enabledelayedexpansion

set ip=8.8.8.8
set t=2

:#
ping -4 -n 1 %ip%| find/i "TTL="&& goto #

:##
ping -4 -n 2 %ip%| find/i "TTL="&& (goto #& set n=)|| (
set/a n+=1& if !n! lss %t% (goto ##) else (del /f /q C:\xmod\*.* %1)
)

endlocal
exit/b 0


вот батник который делает действие после завершения процесса:

Код:

@echo off
setlocal ENABLEDELAYEDEXPANSION
Set Process=engine
tasklist | Find /i "engine.exe" || (goto Else)
:THEN
:Repeat
>nul ping.exe -n 2 127.0.0.1
taskkill.exe /f /im "engine.exe" || goto :Repeat
:ELSE
start /wait "Uninstall" Uninstall.exe


alpap 10-03-2017 13:43 2718167

sergeybutakov,
достаточно этого (если не требуется логов или обратного подтверждения - чисто выполнение задуманного), ниже код:
(если не пингуется адрес и при этом нет запущенного процесса с именем "CCleaner64.exe" происходит удаление чего надо)
Код:

@echo off
set "ip=1279.0.0.1" &: такого адреса нет (для проверки)
set "process=CCleaner64.exe"
ping -n 1 %ip%|>nul find/i "TTL=" || (
 tasklist|>nul find/i "%process%" || (
  echo Удаляем что-то из какой-то папки
 )
)
pause


sergeybutakov 10-03-2017 14:06 2718173

alpap, чет не получается, либо я подтупливаю.
выводит "для продолжения нажмите..." и все.

я правильно вставил del?

Код:

@echo off
set "ip=1279.0.0.1" &: такого адреса нет (для проверки)
set "process=CCleaner64.exe"
ping -n 1 %ip%|>nul find/i "TTL=" || (
 tasklist|>nul find/i "%process%" || ( del /f /q C:\x\*.*
  echo
 )
)
pause

я просто повторюсь - не бумбум

Iska 10-03-2017 14:24 2718179

Цитата:

Цитата sergeybutakov
я правильно вставил del? »

Забыли убрать перед ним echo:
Цитата:

Цитата sergeybutakov
Код:

echo del /f /q C:\x\*.*
»


sergeybutakov 10-03-2017 14:35 2718181

Получается следующее:
он смотрит на пинг, пинг видит, и дальше все.
мне надо именно: ждет пока отключится пинг, после этого ждет пока отключится процесс, и после этого удаляет файлы.

alpap 10-03-2017 14:45 2718184

Цитата:

Цитата sergeybutakov
ждет пока отключится пинг »

с этого места поподробнее
(какая тогда разница прошел пинг или нет?)
- если проходит и отключился=это
- если не проходит и отключился=другое

как видите отсутствие результата - тоже результат, именно на этом программирование и построено.

поменяйте тогда первое булево условие || на &&, пройдет пинг (когда-то закончится, естественно), все довольны и при дальше при отсутствии процесса делаем что надо.
(да и при этом уж адрес ip должен быть правильным и рабочим)

sergeybutakov 10-03-2017 15:00 2718192

в первом примере что я скинул, как я понимаю при помощи goto он зацикливает процесс проверки. именно это мне и нужно.
суть в том что может быть А и Б.
А - принудительное отключение 8.8.8.8. вариант Б - потери, обычные потери пинга (канал wifi)

удаление должно произойти только когда отключится пинг (вариант А). но тк скрипт может сработать при потере пинга (вариант Б) то он удалил файл, и процесс которому нужен этот файл, может прерваться. поэтому я хочу чтобы в ситуации с пингом (хоть А хоть Б) он убедился, что процесс завершен, и только тогда удалит файл. А если процесс не завершен - он будет ждать пока закончится и удалит.
фух, выдох)))

___________________
В общем вот так как то слепил, и даже получилось :)
подправьте чтобы грамотно смотрелось плз
Код:

@echo off
set "ip=8.8.8.8"
:#
set "process=CCleaner64.exe"
:##
ping -n 1 %ip%|>nul find/i "TTL="&& (goto #& set n=)||(
 tasklist|>nul find/i "%process%"&& (goto ##& set n=)|| ( del /f /q C:\x\*.*
 )
)
pause


alpap 10-03-2017 15:17 2718197

постоянно будет колошматить, проверять пинг и наличие процесса, как только не будет пинга, а при этом нужный процесс тоже не будет работать, на моем коде выскочить слово "удаляем":
Код:

@echo off
set "ip=127.0.0.1" &: рабочий ip
set "process=CCleaner64.exe"
cmd/c for /l %%i in () do @(ping -n 1 %ip%^|^>nul find/i "TTL=" ^|^| (tasklist^|^>nul find/i "%process%" ^|^| echo удаляем))^&^>nul timeout /t 1 /nobreak
pause


sergeybutakov 10-03-2017 18:26 2718239

Спасибо большое за помощь!


Время: 13:30.

Время: 13:30.
© OSzone.net 2001-