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

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

Ответить
Настройки темы
CMD/BAT - Сохранение параметра в файл и обратное действие

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


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

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


Добрый вечер!
Есть вопрос, буду благодарен за любую помощь.
Есть программа по смене MAC адреса, называется MacShift
mac адрес меняется на произвольный (random) через bat файл такого содержания:
start c:/macshift/macshift.exe -i "LocalNet" -r
где LocalNet - соответственно название сети, и -r - параметр произвольной смены МАКа
Возможно ли дописать данный бат файл, чтобы он сохранял каждый раз строчку такого содержания:
mac=xxxxxxxxxxxx (соответственно измененный мак адрес)
в файл c:/mac.txt

И второй вопрос, обратный к первому
Какой скрипт нужно написать, чтобы он(скрипт) брал строчку из файла c:/mac.txt содержания
mac=xxxxxxxxxxxx
и xxxxxxxxxxxx вставлял в скрипт как
start c:/macshift/macshift.exe -i "LocalNet" -xxxxxxxxxxxx

Спасибо ОГРОМНОЕ заранее!

Отправлено: 00:15, 29-01-2012

 

Старожил


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

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


Цитата root221:
По моему надо обратное действие ещё »
root221, посмотрите внимательнее на мой скрипт. Там все сделано именно так, как описано в первом посте. Обьясню логику его работы поподробнее:
Перво-наперво, проверяем, есть ли вообще файл, заданный как конфигурационный. Если нету - создаем. Если внутри него нету ключа mac - дописываем пустое. Далее, считываем key-value значения из него с помощью функции :ReadKeyValue, при этом создаются переменные с нужными значениями. После проверяем, определена ли переменная mac - если определена, то запускаем macshift с этим mac-адресом. Если не определена - запускаем macshift, но с ключом -r, он устанавливает случайный мак-адрес, выбираем его знаачение из stdout с помощью конвеера и find, назначаем новое значение переменной mac и записываем в файл с помощью функции :WriteKeyValue
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:15, 02-02-2012 | #11



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

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


Аватара для root221

Старожил


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

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


всё понял почему не работал) Потому что автор не правильно написал... МАК вызывается

Код: Выделить весь код
 не так

-zzzzzzzzz

а вот так

zzzzzzzz

Автору)

Что бы не запустался

Код: Выделить весь код
это
call macshift -i "LocalNet" -%Mac%

заменить надо на

call macshift -i "LocalNet" %Mac%

Последний раз редактировалось root221, 02-02-2012 в 18:51.

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

Отправлено: 18:44, 02-02-2012 | #12


Старожил


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

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


root221, понял, спасибо. Я просто по синтаксису, предложенному автором написал, саму утилиту у себя не запускал из соображений безопасности, а виртуалку поднимать лень было. Исправил в скрипте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:11, 02-02-2012 | #13


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


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

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


Вроде все работает! Спасибо! Как только отключить диалог "нажмите кнопку для продолжения"?
И пришлите пожалуйста в личку вариант перевода Вам моей благодарности

Отправлено: 00:11, 03-02-2012 | #14


Аватара для root221

Старожил


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

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


Код: Выделить весь код
)
Echo MAC не найден, сгенерирован новый: [!mac!]
Call :WriteKeyValue
)
Pause
Exit

Замени на

Код: Выделить весь код
)
Echo MAC не найден, сгенерирован новый: [!mac!]
Call :WriteKeyValue
)
Exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:30, 03-02-2012 | #15


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


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

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


2Anonymоus
Спасибо большое, через личные сообщения не получается писать, говорит что у вас переполнен ящик)

Отправлено: 12:45, 03-02-2012 | #16


Старожил


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

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


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

Отправлено: 12:48, 03-02-2012 | #17


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


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

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


Вылезла маленькая неувязочка в скрипте, он добавляет знак равенства "="
ко всем параметрам в файле ini в квадратных скобках, т.е.
было [blabla]
стало после работы скрипта
[blabla]=
из-за чего теперь не работает другая часть конфига. Не подскажите как решить данную проблему?) Спасибо

Отправлено: 01:57, 14-02-2012 | #18


Старожил


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

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


Abricosio, поправил, теперь больше такого не будет. Вы просто не уточнили с самого начала, что в конфиге могут быть секции ini.

Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Проверяем, существует ли файл, и есть ли в нем нужный нам ключ (mac)
Set CfgFile=config.ini

If Not Exist "%CfgFile%" Echo mac=>"%CfgFile%"
type "%CfgFile%"|Find /I "mac=">nul||Echo mac=>>"%CfgFile%"
:: Проверяем ini-файл на наличие значения mac
Call :ReadKeyValue
If Defined mac (
Echo MAC найден: [%mac%]
:: Если найдено - запускаем macshift со значением из файла
call macshift -i "LocalNet" %Mac%>nul
) Else (
:: Если не найдено - запускаем с ключом -r, парсим вывод и сохраняем новый mac в файл
For /F "tokens=7 skip=1" %%A In ('macshift -i "LocalNet" -r^|find "MAC"') Do (
Set mac=%%A
Set mac=!mac:~,-3!
)
Echo MAC не найден, сгенерирован новый: [!mac!]
Call :WriteKeyValue
)
Exit




rem ====== Функции для работы с ini
:ReadKeyValue
If Not Exist %CfgFile% (Exit 1)
Set i=0
For /F "tokens=1,2 delims== usebackq" %%A In ("%CfgFile%") Do (
	Set /A i+=1
	Set %%A=%%B
	Set CfgKey!i!=%%A
	Set CfgStrings=!i!
)
Exit /B

:WriteKeyValue
If Exist "%CfgFile%" (Del "%CfgFile%")
For /L %%S In (1,1,%CfgStrings%) Do (
	Call :SingleLine "!CfgKey%%S!"
)
Exit /B
:SingleLine
If "%~1"=="" Exit /B
If Not "!%~1!"=="" (Echo %~1=!%~1!>>"%CfgFile%") Else (Echo %~1>>"%CfgFile%")
Exit /B
rem ===============================
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:07, 14-02-2012 | #19


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


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

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


Спасибо большое!

Отправлено: 16:27, 14-02-2012 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
VBS/WSH/JS - [решено] Добавление параметра в текстовый файл равный названию файла XXXp Скриптовые языки администрирования Windows 14 31-03-2012 23:56
Delphi - [решено] Сохранение в файл vovan1993 Программирование и базы данных 18 01-07-2011 17:49
[решено] Изменить значение параметра — Не INI файл! semiono AutoIt 21 13-08-2010 14:12
Как в Omni Page распознавать файл переданый в качестве параметра командной строки madmax24 Программное обеспечение Windows 8 07-06-2007 19:59




 
Переход