|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] сохранение параметра в config.cfg и потом чтоб его можно было применять в других бат |
|
CMD/BAT - [решено] сохранение параметра в config.cfg и потом чтоб его можно было применять в других бат
|
Пользователь Сообщения: 56 |
Мне необходимо параметры к bat для сохранения параметра в файл config.cfg и потом чтоб его можно было брать и применять в других бат файлах .
Например : У бат файле имеется значение %rsd% . У бат файле имеется значение %dtt% . У бат файле имеется значение %rtt% . их нужно сохранить в config.cfg который в той же папке . и потом использовать в другом бат файле который тоже в этой папке . |
|
Отправлено: 14:54, 11-05-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать В начале батника размещаете строку
SetLocal EnableDelayedExpansion Далее, указываете файл настроек Set CfgFile=test.cfg Создаете сам файл настроек и вписываете в него нужные значения, в формате переменная=значение, такой формат еще называют key-value. К примеру, это будет rsd=qwe dtt=rty rtt=zxc123 Далее, в конце батника размещаете этот код - функции для чтения и записи. Вызываются без аргументов. rem ====== Функции для работы с ini rem v2, сохраняет комментарии и строки, не являющиеся парой key=value rem Anonymous, 2011 :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 Not "!%~1!"=="" (Echo %~1=!%~1!>>"%CfgFile%") Else (Echo %~1>>"%CfgFile%") Exit /B rem =============================== Call :ReadKeyValue Всё, все переменные, записанные в файл прочитаны. Можно изменить их как угодно, например Set rtt=0000 и записать изменения в файл вызовом Call :WriteKeyValue Если нужно использовать в других батниках - проследите, чтобы значение переменной CfgFile везде было одинаковым. |
Отправлено: 21:25, 11-05-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 56
|
Профиль | Сайт | Отправить PM | Цитировать немного сложно но на примере было бы проще , но я всё же попробую разобраться ))) СПС
|
Отправлено: 23:08, 11-05-2012 | #3 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать vlad_exe@vk, вот пример, у которого каждая строчка прокомментирована. Так разберетёсь?
@Echo Off SetLocal EnableDelayedExpansion :: Назначаем файл настроек Set CfgFile=config.cfg :: Проверяем - есть ли файл настроек If Not Exist "%CfgFile%" ( rem Если нету - создаем. Вот такой немного необычный метод перенаправления rem лучше применять, если создается файл в несколько строк. rem Значения переменных в файле - пустые, их потом установим внутри скрипта. rem Сюда обязательно стоит внести ВСЕ переменные, подлежащие сохранению. rem Обращу внимание на то, что внутри этой конструкции комментарии лучше rem писать с rem, это единственно верный способ, чтобы не вызвать ошибки. >"%CfgFile%" ( Echo # This is a comment. Echo Peremennaya1= Echo Peremennaya2= Echo Peremennaya3= Echo Peremennaya4= Echo # End of test cfg-file ) ) :: Читаем то, что сохранено у нас в файле. Если он только что создан, то и :: переменные в нем будут пустыми Call :ReadKeyValue :: Выводим в консоль значения, прочитанные из файла Echo. Echo OLD: Echo Peremennaya1=%Peremennaya1% Echo Peremennaya2=%Peremennaya2% Echo Peremennaya3=%Peremennaya3% Echo Peremennaya4=%Peremennaya4% Echo. :: Заполняем переменные случайными значениями - для демонстрации того, :: что в файл запишутся именно эти значения. В реальном скрипте, не примере - :: эти значения меняются сами, во время работы скрипта, у нужных переменных. Set Peremennaya1=%Random%%Random% Set Peremennaya2=%Random%%Random% Set Peremennaya3=%Random%%Random% Set Peremennaya4=%Random%%Random% :: Ещё раз выводим, чтобы показать - значения сменились, они не те, что при старте. Echo NEW: Echo Peremennaya1=%Peremennaya1% Echo Peremennaya2=%Peremennaya2% Echo Peremennaya3=%Peremennaya3% Echo Peremennaya4=%Peremennaya4% Echo. :: Наконец, пишем изменения в файл. Вот так просто, вызовом одной функции. Call :WriteKeyValue :: Выходим после нажатия любой кнопки. Теперь можно запустить скрипт ещё раз :: и посмотреть на то, как при старте прочитаются значения из файла, а потом :: запишутся новые. :: Ещё конечно же, можно открыть файл настроек блокнотом и посмотреть на то, :: что у него внутри. Pause&Exit rem ====== Функции для работы с ini rem v2, сохраняет комментарии и строки, не являющиеся парой key=value rem Anonymous, 2011 :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 Not "!%~1!"=="" (Echo %~1=!%~1!>>"%CfgFile%") Else (Echo %~1>>"%CfgFile%") Exit /B rem =============================== |
Отправлено: 06:15, 12-05-2012 | #4 |
Пользователь Сообщения: 56
|
Профиль | Сайт | Отправить PM | Цитировать ОГРОМНОЕ СпС приблизительно понял )))
|
|
Отправлено: 11:25, 12-05-2012 | #5 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать еще 1 вариант решения - возможно в вашем случае окажется проще:
в самом батнике добавляем строку в начале rem считываем переменные из файла For /F "eol=# tokens=1* delims==" %%i In (C:\Programs\Scripts_BAT\parametrs.txt) Do Set %%i=%%j ну и конечно сам файл с параметрами, как и писал Anonymоus Цитата Anonymоus:
имя параметра = значение параметра |
|
Отправлено: 11:26, 14-05-2012 | #6 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Anonymоus, ваш батник хорош, но у него есть проблемы, я решил их так:
%~d0 cd /d %~dp0 :: тут всякий код set CfgFile=%appname%.cfg :: читаем и пишем :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 rem исправляем проблему с двоеточием в комментарии, которое нарушает условие set if=%~1 set if=%if::=% rem убираем кавычки for /f "delims=" %%A in ('echo %%%1%%') do set %1=%%~A if "!%if%!"=="" ( rem goto нужно в условиях между скобками иначе будет ошибка непредвиденного появления !# (ему не нравится завершающая скобка если строка не в кавычках) goto WriteComment ) else ( goto WriteParameters ) exit /B :WriteComment echo %~1>>%CfgFile% exit /B :WriteParameters echo %~1=!%~1!>>%CfgFile% exit /B 1. ошибка двоеточия в комментарии; 2. ошибка закрывающей скобки на конце комментария. Не решено, но обходится: 1. Если на конце комментария цифра, то этот комментарий на конце надо отбить пробелом, иначе комментарий пропадёт. |
Отправлено: 18:49, 02-04-2016 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Сохранение параметра в файл и обратное действие | Abricosio | Скриптовые языки администрирования Windows | 21 | 21-03-2012 14:31 | |
.NET - Как отобр-ть результат ф-ции (Exp/F-E),чтоб потом производить вычисления? | Ksenya | Программирование и базы данных | 2 | 17-12-2011 17:29 | |
7 / 2008 R2 - Надо поставить win 7 на диск С, при этом чтоб не было других ОС | Rindo | Microsoft Windows 7 | 13 | 02-11-2009 10:13 | |
Разное - Как открыть базу тестов, чтоб можно было распечатать | Rustem | Хочу все знать | 2 | 13-02-2009 15:48 | |
Что зделать чтоб можно было пистаь по руски в xterm | nagel | Общий по FreeBSD | 8 | 13-05-2004 11:16 |
|