Войти

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


root221
19-03-2012, 20:40
Здравствуйте,

Нужен скриптик который будет пинговать адреса из списка Spisok.txt и все адреса которые доступны, нужно что-бы заносились в список Alive.txt а все которые не доступны, в список Err.txt, ну и общий список all_test.txt в который нужно заносить все адреса, которые были проверены скриптом.

Далее.

Нужно что бы когда всё проверилось и я добавил в Spisok.txt новые адреса то те адреса которые уже были проверены ранее и присутствуют в списке all_test.txt, больше не проверялись и из списка Spisok.txt проверялись только те, которых ещё нет в списке all_test.txt

Пока на этом всё, жду ваших вариантов, Заранее благодарен!

Foreigner
19-03-2012, 22:20
root221,

@echo off
setlocal

if not exist all_test.txt 1>all_test.txt echo 127.0.0.1
for /f %%i in (' findstr /v /g:all_test.txt spisok.txt ') do (

1>>all_test.txt echo %%i
1>nul ping -n 1 %%i && 1>>alive.txt echo %%i || 1>>err.txt echo %%i

)

root221
19-03-2012, 23:10
ничего не понял(

вот список

127.0.0.1:123
127.0.0.2:123
127.0.0.3:123

нужно сделать delims=:

проверять пинги адресов из списка Spisok.txt...

те адреса которые доступны нужно заносить в список alive.txt

которые не доступны в список err.txt

все которые проверились в список all_test.txt

потом я обновлю списк Spisok.txt и там могут быть совпадения что бы их убрать нужно сравнить списк all_test.txt и убрать совпадения из списка Spisok.txt а потом начать сканировать только те адреса которых ещё нет в списке all_test.txt и добавлять новые которые будут отсканированы из списка Spisok.txt в список all_test.txt, и так каждый раз

Foreigner
19-03-2012, 23:24
вот список »
А что за ":123" ? У меня без этого все работает.


@echo off
setlocal

if not exist all_test.txt 1>all_test.txt echo 127.0.0.1:123
for /f "tokens=1,2 delims=:" %%i in (' findstr /v /g:all_test.txt spisok.txt ') do (

1>>all_test.txt echo %%i:%%j
1>nul ping -n 1 %%i && 1>>alive.txt echo %%i:%%j || 1>>err.txt echo %%i:%%j

)

root221
20-03-2012, 03:35
А что за ":123" ? У меня без этого все работает. »
порт

не могу понять зачем тут

if not exist all_test.txt 1>all_test.txt echo 127.0.0.1:123

127.0.0.1 это пример)))) адреса могут быть другими

у меня он не работает =)

Ошибка findstr

root221
20-03-2012, 03:53
В общем вот...

For /F "tokens=1,2 delims=:" %%A In (List.lst) Do (
ping -a -n 2 -w 400 %%A|Find /I "TTL=">nul&&(
Echo %%A - OK
Echo %%A>>List_Yes.lst
)||(
Echo %%A - Error
Echo %%A>>List_No.lst
)
)

нужно просто всегда сравнивать List_No.lst и основной список который будет обновляться List.lst, на совпадения и если они есть тогда чистить List.lst от адресов которые уже ранее были проверены.

Foreigner
20-03-2012, 06:41
не могу понять зачем тут »

На случай если нет файла all_test.txt, он создается, а 127.0.0.1:123 просто чтобы в этом файле была строка, любая строка.

В общем вот... »

У меня тоже самое. Но в цикле findstr забирает из spisok.txt только те строки, которых нет в all_test.txt

findstr /v /g:all_test.txt spisok.txt

root221
20-03-2012, 14:00
Foreigner, странно добавляю в spisok.txt адреса вида 127.0.0.1:1234, запускаю ваш скрипт и он тупо закрывается, мельком в лаге удалось мне прочитать что какая-то ошибка в findstr

если что моя OS: WinXP SP3

всё.. я разобрался

можно ещё сделать что бы всё выводилось в консоль? что-бы я видел как идёт сканирование и с нумерацией

примерно так..

[1/999] 127.0.0.1:123
[2/999] 127.0.0.2:1234
[3/999] 127.0.0.1:12345

ну и в конце пауза с сообщением..

echo Сканирование завершено - Теперь можно закрыть консоль.

Delirium
20-03-2012, 14:11
мельком в лаге удалось мне прочитать »
в самом конце скрипта напиши pause и увидишь полный текст ошибки.

root221
20-03-2012, 15:25
Delirium, я же написал уже что разобрался и попросил доделать немного.

Foreigner
20-03-2012, 19:53
всё.. я разобрался »
Значит работает.
примерно так..
[1/999] 127.0.0.1:123
[2/999] 127.0.0.2:1234
[3/999] 127.0.0.1:12345 »

999 - это что? Без 999:

@echo off
setlocal enabledelayedexpansion

set "num=1000"

if not exist all_test.txt 1>all_test.txt echo 127.0.0.1:123
for /f "tokens=1,2 delims=:" %%i in (' findstr /v /g:all_test.txt spisok.txt ') do (

1>>all_test.txt echo %%i:%%j
1>nul ping -n 1 %%i && 1>>alive.txt echo %%i:%%j || 1>>err.txt echo %%i:%%j
set /a num+=1
echo [!num:~-3!] %%i:%%j

)
echo Done


Совет: Ставь задачу сразу полностью. Ради добавления какого-либо функционала в некоторых случаях придется многое переделывать

root221
20-03-2012, 22:56
Foreigner,

999 Ну это количество строк всего и сколько уже завершено =)

Всё всем спасибо я во всём разобрался.

Foreigner
20-03-2012, 23:04
999 Ну это количество строк всего и сколько уже завершено »
А зачем все строки из spisok.txt, если обрабатываются только те, которых нет в all_test.txt?




© OSzone.net 2001-2012