Войти

Показать полную графическую версию : помогите довести до ума батник (ping + for + goto?)


rewqazt
15-03-2017, 19:06
задача - проверить по пингу ip и если пинги есть, то выполнить несколько команд по установке софта.

сейчас код выглядит так

for /l %%i in (1,1,254) do (
echo 192.168.0.%%i
copy file1.exe \\192.168.0.%%i\c$\Windows
PsExec.exe \\192.168.0.%%i "file1.exe" -server 123.123.123.123"
del \\192.168.0.%%i\c$\Windows\file1.exe
)
pause

работает но медленно.

Хочу вставить проверку по пингу и если пинг есть запустить в отдельном потоке выполнение данных команд. Если пинга нет то перейти к началу цикла.

пробовал конструкцию наподобие PING 192.168.0.%%i |find "TTL=" || goto pingFalse с вызовом подпрограммы но ничего не получается.

megaloman
15-03-2017, 21:16
@Echo Off
cls

Set "Network=192.168.0"

FOR /L %%p IN (1,1,254) DO Call :Job "%Network%.%%p"

GoTo :Eof

:Job
FOR /F "usebackq tokens=1,2,3 skip=2 delims==" %%i IN (`ping %~1 -4 -n 1`) DO (
If "%%k"=="" (
Echo --- %1 Недоступен
GoTo :Eof
) Else (
Echo +++ %~1
Echo ++++++++++++++ Далее делаем что нам нужно
GoTo :Eof
)
)
GoTo :Eof

rewqazt
17-03-2017, 11:58
Благодарю

rewqazt
17-03-2017, 12:49
В продолжение. Как теперь вызвать в другом батнике команды именно для этого ip? т.е. start и в аргументах передать %Network%.%%p

Echo ++++++++++++++ Далее делаем что нам нужно

а то команды делаются долго, чтоб не ждать выполнения а сразу запустить для всех ip.

Iska
17-03-2017, 13:22
rewqazt, start-то Вы сделаете, а вот вернуться и сделать что-то по результатам — уже нет. Тут нужен WSH/PoSH.

rewqazt
17-03-2017, 14:11
Спасибо.




© OSzone.net 2001-2012