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

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

root221 03-02-2012 17:35 1851033

bat читает из лог файла
 
В общем сразу к теме.

Есть лог файл, я назвал его так config.log.

Выглядит он так

Код:

IP Машины    Мак адрес

127.0.0.1    001234567891
127.0.0.10    001234567892
127.0.0.100    001234567893

Надо переделать скрипт так, что бы он брал всё из лог файла, а не из самого скрипта.


Сейчас это находится у меня в самом скрипте.
и выполняется так

Код:

SetLocal
Rem _Number=Parameters
Set _1=001234567891
Set _10=001234567892
Set _100=001234567893

Set /P "i=      num: "
If Defined _%i% (Call program.exe "%%_%i%%%" > nul

нужно то же самое, только что бы № и МАК брались из лог файла.

И в дальнейшем что бы я вводил например 100 и что бы Мак-Address менялся на тот, который присвоен к компьютеру ( 127.0.0.100 [001234567893] ) который как я уже говорил ранее, в списке моего лог файла.

Anonymоus 04-02-2012 06:57 1851476

Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set DataFile=config.log
Call :Read
:WaitUserCommands
Set Number=
Echo.
Echo  Введите номер компьютера:
Echo  (0 - для показа всех пунктов)
Set /P Number=  ^>^>
If "%Number%"=="" (Cls&Echo  Вы ничего не ввели&GoTo WaitUserCommands)
If %Number%==0 (Call :Display&GoTo WaitUserCommands)
If Not %Number% GTR %i% (Call program.exe !MAC%Number%!) Else (Cls&Echo  Неправильный номер&GoTo WaitUserCommands)
Exit


:Display
Echo.
For /L %%C In (1,1,%i%) Do (Echo [%%C]  !IP%%C!  !MAC%%C!)
Pause
Cls
GoTo :EOF

:Read
Set i=0
For /F "tokens=1,2 skip=1 usebackq" %%A In ("%DataFile%") Do (Set /A i+=1&Set IP!i!=%%A&Set MAC!i!=%%B)
GoTo :EOF


megaloman 04-02-2012 10:12 1851510

Если в файле config.log первые две строки не значащие, то
Код:

@Echo Off
cls

:Begin

Set i=
Set /P "i=      номер компьютера: "

If "%i%"=="" GoTo :Eof

FOR /F "skip=2 tokens=4,5 delims=. " %%a IN (config.log) DO (
  If %%a EQU %i% (
      Echo Call Ваш.exe %%a  %%b
      GoTo :Begin
  )
)
Echo Номер компьютера =%i% не содержится в файле
pause
GoTo :Begin


root221 04-02-2012 18:19 1851794

Ни один и ни другой не может правильно определить номер компьютера...

например:

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

Foreigner 04-02-2012 18:49 1851809

root221,

Без проверки правильности введенного значения:
Код:

@echo off
setlocal

set /p num="Enter number: "

for /f "tokens=2" %%i in (' findstr "127\.[0-9]*\.[0-9]*\.%num%" config.log' ) do (

    echo %%i

)


Anonymоus 04-02-2012 19:59 1851850

root221, что в моём варианте у вас не работает?

root221 05-02-2012 01:20 1852029

Anonymоus, в вашем варианте почему то когда вводишь 10 компьютер, меняется на 16 а не на 10 (((
megaloman, Спасибо ещё раз, воспользовался вашим вариантом, т.к он мне подошел.

Foreigner, Вашь вариант, чёто затупил, когда ввёл не существующий компьютер из списка и начал перебирать всё подрят.

Пачка вариантов не плохая. Доволен....

Спасибо всем кто принимал участие.

Foreigner 05-02-2012 08:01 1852100

Цитата:

Цитата root221
Вашь вариант, чёто затупил, когда ввёл не существующий компьютер из списка и начал перебирать всё подрят. »

Он просто не найдет нужную строку в логе, "затупить" он может только при nul-значении (когда ничего не ввел и нажал ввод).


Время: 08:49.

Время: 08:49.
© OSzone.net 2001-