Компьютерный форум 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=222108)

orbita 03-12-2011 21:37 1808691

пинг группы адресов и запись первого удачного в файл в конкретное место.
 
имеем
192.168.5.1-254
192.168.8.1-254
первый ответивший записываем в файл 111.ini на место 192.168.?.?

111.ini имет вид
IP=192.168.?.?
Port=1234
и т.д.

zion87 06-01-2012 04:33 1829400

вообщем сам пока не сильно разбираюсь во всем этом деле, но могу предложить этот вариант:

Код:

@echo off
set s=0
set p=5
:start_1
set /a s=%s%+1
if %s%==255 goto next_ip
ping -n 1 -l 5 10.108.%p%.%s%|Find /I "TTL="|| goto start_1
goto read
:next_ip
set s=0
set p=8
:start_2
set /a s=%s%+1
ping -n 1 -l 5 192.168.%p%.%s%|Find /I "TTL="|| goto start_2
if %s%==255 exit
:read
echo fName = "111.ini" >temp.vbs
echo iStrok = 1 >>temp.vbs
echo repTxt = "IP=192.168.%p%.%s%" >>temp.vbs
copy temp.vbs + chang.vbs
start/wait temp.vbs
del temp.vbs
exit

для замены ip в файле 111.ini использовал скрипт chang.vbs скачать его можно здесь

если ссылка не сработает, то вот код из скрипта

Код:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(fName, 1, False) 
AllTxt = F.ReadAll()                       
F.Close                                     
AllTxt = Replace(AllTxt, vbLf, "")         
Mas = Split(AllTxt, vbCr)                     
nStrok = UBound(Mas)       
AllTxt = ""
If nStrok + 1 >= iStrok Then
    Mas(iStrok - 1) = repTxt                 
    For i = 0 To nStrok
        If i <> nStrok Then
            AllTxt = AllTxt + Mas(i) + vbCrLf 
        Else
            AllTxt = AllTxt + Mas(i)       
        End If
    Next
    Set F = FSO.OpenTextFile(fName, 2, False) 
    F.Write AllTxt                           
    F.Close                               
End If


Anonymоus 06-01-2012 10:32 1829451

Думаю, это именно то, что вам нужно. Первый удачно пропингованный адрес пишется вместо текущего значения IP в 111.ini. Хочу заметить, что при таком способе чтения ini-файла, теряются [секции] и #; комментарии, если они у вас есть.
Я тестировал с ini-файлом такого вида:
Код:

IP=127.0.0.1
Port=1234
Test1=111
Test2=222

А вот сам скрипт:
Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set CfgFile=111.ini
Call :ReadCfg
Call :Pinger 192.168.5 192.168.8
Pause
Exit

:Pinger
If "%1"=="" Exit /B
For /L %%I In (1,1,254) Do (
        Ping -n 1 %1.%%I|Find /I "TTL=">nul&&(
                Set IP=%1.%%I
                Call :WriteCfg
                Exit /B
        )
)
Shift
GoTo Pinger


:: ==Чтение-запись в key-value файл c сохранением порядка строк=
:: Anonymous, 2011
:ReadCfg
If Not Exist %CfgFile% (Exit 1)
Set i=0
For /F "tokens=1,2 delims==" %%A In (%CfgFile%) Do (
        Set /A i+=1
        Set %%A=%%B
        Set CfgKey!i!=%%A
        Set CfgStrings=!i!
)
Exit /B

:WriteCfg
If Exist %CfgFile% (Del %CfgFile%)
For /L %%S In (1,1,%CfgStrings%) Do (
        Call :WriteSingleLine "!CfgKey%%S!"
)
Exit /B
:WriteSingleLine
Echo %~1=!%~1!>>%CfgFile%
Exit /B
:: =============================================================



Время: 11:06.

Время: 11:06.
© OSzone.net 2001-