Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Тестирование сетки.

Ответить
Настройки темы
CMD/BAT - [решено] Тестирование сетки.

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Возникла необходимость тестировать сеть, чтобы определить работающее оборудование.
Имеется Excel-ский файл, состоит из нескольких столбцов. В 14 столбце занесены IP адреса. Нужно взять IP, пингануть и результат пингов записать в следующий столбец т.е сформировать 15 столбец с результатами, если хоть один пинг прошёл то результат ОК, если нет то строку оставить пустым. Затем переход на следующую строку.
и так до конца столбца. Всего 1000 строк. Желательно, чтобы можно былобы регулировать количество пингов.
Буду очень признателен за помощь.

Отправлено: 15:32, 12-10-2010

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Sub pingnet()
    Begin = "N3"    ' Клетка, с которой начинается просмотр адресов в таблице
    N_Uzl = 1       ' Число подузлов, отлич на единицу в последнем октете (>0!!!)
    i_Win = 1       ' 1 - видимое командное окно при пропинговке, 0 - не видимое
    N_Ping = 8      ' Число запросов
    
    Set WS = CreateObject("WScript.Shell")
    
    ip = Range(Begin)
    i = 0
    Do While Len(Trim(ip)) <> 0
        ipm = Split(ip, ".")
        Range(Begin).Offset(i, 1) = "Тестирую ..."
        Range(Begin).Offset(i, 2) = ""
        Ret = WS.Run("cmd /C Ping -n " + CStr(N_Ping) + " " + ip, i_Win, True)
        
        Msg = CStr(Date) + " " + CStr(Time)
        Msg2 = ""
        If Ret = 0 Then
            Msg = Msg + " OK"
            For j = 1 To N_Uzl
                ip = CStr(ipm(0)) + "." + CStr(ipm(1)) + "." + CStr(ipm(2)) + "." + CStr(ipm(3) + j)
                Ret = WS.Run("cmd /C Ping -n " + CStr(N_Ping) + " " + ip, i_Win, True)
                Msg2 = Msg2 + ip
                If Ret = 0 Then Msg2 = Msg2 + "-OK " Else Msg2 = Msg2 + "-Err "
            Next
        Else
            Msg = Msg + " Err"
        End If
        Range(Begin).Offset(i, 1) = Msg
        Range(Begin).Offset(i, 2) = Msg2
        
        i = i + 1
        ip = Range(Begin).Offset(i, 0)
    Loop
End Sub
Мне было бы интересно знать, какие из моих сообщений Вы посчитали полезными для себя

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-10-2010 в 15:15.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:07, 19-10-2010 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:29, 19-10-2010 | #22


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё понятно и всё работает.
Большое спасибо за помощь!!!
Успехов Вам!

Отправлено: 15:48, 19-10-2010 | #23


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


У этих скриптов есть интересная особенность, при пинге узла от которого приходит не "превышен интервал ожидания для запроса", а "ответ от *.*.*.* заданный узел не доступен", в результат записывает ОК.

Отправлено: 13:34, 28-10-2011 | #24


Новый участник


Сообщения: 28
Благодарности: 1

Профиль | Отправить PM | Цитировать


Добрый день! Подскажите пожалуйста, а каким образом можно данный bat-файл приспособить к следующей задаче:
Есть контрольный файл в папке C:\111 с названием: "HTIN.txt"
В нем есть контрольные строки вида:
Код: Выделить весь код
C:\222\000047675410000000011122015.XML:	
C:\222\000070380710000000011122015.XML:	
C:\222\000072491010000000011122015.XML:	
C:\222\000072515710000000011122015.XML:
Есть папка C:\111 с файлами: "R22GA.txt" его содержимое:
Код: Выделить весь код
C:\222\000047675410000000011122015.XML:	456
C:\222\000070380710000000011122015.XML:	213
C:\222\000072491010000000011122015.XML:	432
"R23GA.txt"его содержимое:
Код: Выделить весь код
C:\222\000047675410000000011122015.XML:	987
C:\222\000072491010000000011122015.XML:	456
Нужно чтобы скрипт читал из папки C:\111\*.XML файлы
И если находил в них еквивалентную контрольному файлу строчку, то записывал результат следующим образом:
Содержимое "HTIN.txt" после обработки:
Код: Выделить весь код
                                                                             R22GA   R23GA
C:\222\000047675410000000011122015.XML:	456      987
C:\222\000070380710000000011122015.XML:	213
C:\222\000072491010000000011122015.XML:	432      456
C:\222\000072515710000000011122015.XML:
Извините что морочу голову, но излазив все эти ваши интернеты так и не нашел достойного решения. И вот гляжу на этот скрипт по пингу сети и думаю "это ж мое", но как его правильно переделать под свою задачу знаний не хватает =(.

Я понимаю следующее:

Код: Выделить весь код
@Echo off
setLocal EnableExtensions
rem здесь нужно подставить вместо даты и время на название файлов из папки C:\111
set tm=%time::=%
set tm=%tm:~0,-3%
set dt=%date:~8,2%%date:~3,2%%date:~0,2%

rem 
for /f "UseBackQ tokens=1,*" %%A in ("%~n0.txt") do call :Ping %%A "%%B"
del /f "%~n0.old" >nul 2>nul
ren "%~n0.txt" *.old 2>nul
ren "%~n0.tmp" *.txt 2>nul
goto END

:Ping
set stat=Faild
if "%1"=="Date" echo Date		%dt%	%~2>>"%~n0.tmp"&exit /b
if "%1"=="Time" echo Time		%tm%	%~2>>"%~n0.tmp"&exit /b
rem а вместо команды ping нужно подставить команду которая будет проверять эквивалентность первого столбца в каждом файле со строкой в контрольном файлк и если они будут идентичными то подставлять значение из текущего по списку файла.
ping -n 1 %1 >nul 2>nul
if %ErrorLevel%==0 set stat=Ok
echo %1	%stat%	%~2>>"%~n0.tmp"
exit /b

:END

Последний раз редактировалось gremlintv2, 22-01-2016 в 17:31. Причина: ошибка


Отправлено: 17:24, 22-01-2016 | #25


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата gremlintv2:
Я понимаю следующее... »


Не-а, нужен другой алгоритм:

Код: Выделить весь код
@echo off

set "dir=C:\111"
set "control=HTIN.txt"
set "files=R*.txt"

pushd "%dir%"|| exit/b& set "t=	"
set "y=%t%%t%%t%%t%%t%"
<"%control%">"%~dp0.tmp" (
for /f "tokens=1,2 delims=:" %%i in ('more') do @(
 set "x=%%i:%%j:"
 for /f "delims=" %%k in ('"2>nul dir/a-d/b "%files%"| sort"') do @(
  if defined y (if defined z (call set "z=%%z%%%t%%%~nk") else set "z=%y%%%~nk")
  for /f "tokens=3 delims=:" %%l in ('"<"%%k" find/i "%%i:%%j:""') do @(
   for /f %%m in ("%%l") do @call set "x=%%x%%%t%%%m"
  )
 )|| call set "x=%%x%%%t%   "
 cmd/v/c "(if defined z echo.!z!)& echo.!x!"& set "x="& set "y="& set "z="
)
)& >nul move "%~dp0.tmp" "%control%"& popd

exit/b
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:02, 24-01-2016 | #26


Новый участник


Сообщения: 28
Благодарности: 1

Профиль | Отправить PM | Цитировать


Georgio, огромное вам спасибо за помощь! Извините что поблагодарил только сейчас. Как говориться лучше поздно чем никогда. А не подскажете как решить такой вопрос:
Код: Выделить весь код
 @Echo off
setLocal EnableExtensions

set tm=%time::=%
set tm=%tm:~0,-3%
set dt=%date:~8,2%%date:~3,2%%date:~0,2%

for /f "UseBackQ tokens=1,*" %%A in ("%~n0.txt") do call :Ping %%A "%%B"
del /f "%~n0.old" >nul 2>nul
ren "%~n0.txt" *.old 2>nul
ren "%~n0.tmp" *.txt 2>nul
goto END

:Ping
set stat=Faild
if "%1"=="Date" echo Date		%dt%	%~2>>"%~n0.tmp"&exit /b
if "%1"=="Time" echo Time		%tm%	%~2>>"%~n0.tmp"&exit /b
ping -n 1 %1 >nul 2>nul
if %ErrorLevel%==0 set stat=arp -a %1
echo %1	%stat%	%~2>>"%~n0.tmp"
exit /b
:END
Возможно ли в данном коде подставить в переменную stat макадрес?

Отправлено: 15:58, 12-04-2016 | #27



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Тестирование сетки.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Route/Bridge - Схема сетки dmz Сетевые технологии 4 06-12-2010 20:28
Доступ к шаре из сетки Negativ Microsoft Windows NT/2000/2003 2 17-08-2010 17:45
Прочее - Схема небольшой сетки migel2007 Сетевые технологии 10 28-06-2008 01:42
создание сетки abramov4 Сетевые технологии 15 06-03-2006 13:31
Проблема со скоростью в сетки SanCho Сетевые технологии 7 14-11-2003 01:21




 
Переход