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] ) который как я уже говорил ранее, в списке моего лог файла.
|
Код:
@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
|
Если в файле 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
|
Ни один и ни другой не может правильно определить номер компьютера...
например:
набираю 26 он мне находит компьютер, только уже с мак адресом 23-го а не 26 как было написано в запросе..
|
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
)
|
root221, что в моём варианте у вас не работает?
|
Anonymоus, в вашем варианте почему то когда вводишь 10 компьютер, меняется на 16 а не на 10 (((
megaloman, Спасибо ещё раз, воспользовался вашим вариантом, т.к он мне подошел.
Foreigner, Вашь вариант, чёто затупил, когда ввёл не существующий компьютер из списка и начал перебирать всё подрят.
Пачка вариантов не плохая. Доволен....
Спасибо всем кто принимал участие.
|
Цитата:
Цитата root221
Вашь вариант, чёто затупил, когда ввёл не существующий компьютер из списка и начал перебирать всё подрят. »
|
Он просто не найдет нужную строку в логе, "затупить" он может только при nul-значении (когда ничего не ввел и нажал ввод).
|
Время: 08:49.
© OSzone.net 2001-