|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как заменить строку в ENTRIES.INI средствами автоматизации. |
|
|
[решено] Как заменить строку в ENTRIES.INI средствами автоматизации.
|
Ветеран Сообщения: 842 |
Нужно немножко не сложной автоматики, но лучше чтоб кто-то подсказал...
Условия: Имеется директория в которой файлы: SVCPACK\ ENTRIES.INI ENTRIES.INI выглядит так Мне нужно каждый раз положить в папку SVCPACK файл с новым именем *.exe и прописать его имя в ENTRIES.INI вместо filename.exe и после этого запаковать в rar- архив. rar a newname -ac -m3 -r -t SVCPACK ENTRIES.INI Самое сложное наверное для меня заменить строку в ENTRIES.INI. Хотя и получить переменную прочитав SVCPACK\*.exe наверное тоже не просто? |
|
------- Отправлено: 03:13, 28-03-2009 |
Старовер Сообщения: 1708
|
Профиль | Отправить PM | Цитировать semiono
Измените название темы. Нынешнее - Архивирование... не соответствует правилам конференции, и не раскрывает вашего вопроса. Чем быстрее вы сформулируете ваш вопрос, тем быстрее вам помогут. Пример правильного названия Как заменить строку в ENTRIES.INI средствами автоматизации. |
------- Отправлено: 09:59, 28-03-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старовер Сообщения: 1708
|
Профиль | Отправить PM | Цитировать Цитата:
Что значит каждый раз положить?? |
|
------- Отправлено: 00:41, 30-03-2009 | #3 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать список в ini должен обновляться
или дополняться? Цитата semiono:
а не так: пример чтения/замены: #region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion Global $sFilePath = @ScriptDir & '\SVCPACK\ENTRIES.INI' Global $sFileText = FileRead($sFilePath) Global $hFile, $vSerch, $sAddProgram, $sAddProgramNew ;~ Чтение: $vSerch = StringRegExp($sFileText, '(?i)\[AddProgram\]\s*\r*\n*\s*(.+)\s+/verysilent', 1) If @Error == 1 Then $vSerch = '' EndIf If IsArray($vSerch) Then $sAddProgram = $vSerch[0] EndIf MsgBox(64, 'Результат чтения:', $sAddProgram) ;~ Замена: $sAddProgramNew = 'New_' & $sAddProgram $sFileText = StringRegExpReplace($sFileText, '(?i)\[AddProgram\]\s*\r*\n*\s*(.*)/verysilent', '[AddProgram]' & @CRLF & $sAddProgramNew & ' /verysilent') MsgBox(64, 'Результат записи:', $sFileText) ;~ Запись: $hFile = FileOpen($sFilePath, 2) FileWrite($hFile, $sFileText) FileClose($hFile) |
|
------- Отправлено: 01:26, 30-03-2009 | #4 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать А хорошо! Попробую этот пример подогнать!
newname - достаточно, так как рар сам добавляет рсасширение .zip и сам открывается по rar (zip - более подходит для дистрибутизации, так как он встроен в винду и значится у всех есть) поясню: я часто переделываю свои хотфиксы, и папка SVCPACK используется под разные пакеты, в файле ENTRIES.INI лишь заменяется имя пакета, остальное всё одинаково. Например, "WinRar.exe" А так как я делаю часто исправление и пакетов много, то хочется автоматизировать это дело. Причём у меня свои заморочки ещё, я например люблю дату файлов выставлять одинаково и аттрибуты A тоже сбрасывать. |
|
------- Отправлено: 16:23, 31-03-2009 | #5 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Мне нужно прочесть имя файла @ScriptDir & "\SVCPACK\*.exe" а не содержимое!
Наверное будет так - FileGetLongName(@ScriptDir & '\SVCPACK\*.exe') В StringRegExpReplace я конечно запутался ![]() Можно бы было просто вписать в четвёртую строку полученный @filename.exe & "/verisilent" но я что-то не нашёл как установить курсор в нужную строку, чтоб не затирать весь файл от начала? а с регексп заменой, я опять же не шарю... Думал уже сам смогу, но не получается. Чтоб не было недразумений - @ScriptDir & "\SVCPACK\*.exe" - это @имя некого файла, можно и так даже *.* или даже * @ScriptDir & "\ENTRIES.INI" - этот файл редактируется, в его последнюю строку надо внести только @имя + /VERYSILENT Пример: |
------- Отправлено: 17:18, 31-03-2009 | #6 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать
Вот блин функция, что напишешь то и вернёт!
Это же тупо, написать в параметре функции путь с именем файла и на выходе его же и получить! 0O А между тем я так и не понял, чтоли нету способа получить имя файла *.exe в папке svcpack\ Да хоть бы и с путём, хотя я запарюсь отсекать потом лишнее регеспом... ?? Я уже думал сейчас всё получится, но прежняя загвоздка в получении имени ексешнига Причём ещё одна неожиданность, интересно пустое поле прокатит? Так как там отсутствует KEY TBIView.exe /verysilent - сразу идёт! |
------- Отправлено: 22:07, 07-04-2009 | #7 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать #region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion Global $sIniFileName = 'entries.ini' Global $sDirPath = @ScriptDir & '\SVCPACK' If StringRight($sDirPath, 1) == '\' Then $sDirPath = StringTrimRight($sDirPath, 1) _FindFile() Func _FindFile() Local $hFind, $sFileName $hFind = FileFindFirstFile($sDirPath & '\*.*') If $hFind == -1 Then MsgBox(16, 'Ошибка', 'В искомой папке ненайденно файлов') Exit EndIf While 1 $sFileName = FileFindNextFile($hFind) If @error Then ExitLoop If $sFileName = $sIniFileName Then ContinueLoop _WriteFileName($sFileName) ExitLoop WEnd FileClose($hFind) EndFunc Func _WriteFileName($sFileName) Local $sIniFileText = FileRead($sDirPath & '\' & $sIniFileName) $sIniFileText = StringRegExpReplace($sIniFileText, '(?s)(\[.+\]).+', '\1') & @CRLF & $sFileName & ' /verysilent' Local $hFile = FileOpen($sDirPath & '\' & $sIniFileName, 2) FileWrite($hFile, $sIniFileText) FileClose($hFile) EndFunc но мысли читать очень сложно, к тому же на расстоянии ))) попробуйте более точно излагать вопросы, пример: 1. Как узнать имена всех файлов в папке. 2. Как записать имя первого найденного файла, из пункта 1, в ini файл, структура ini <такая-то>, в строку ini файла <такую-то> в <такой-то форме>, сам ini файл находится <там-то>. и т.д. необязательно именно так, но чуть более конкретнее, тал легче ответить ))) |
------- Отправлено: 23:06, 07-04-2009 | #8 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Цитата proxy:
![]() |
|
------- Отправлено: 23:27, 07-04-2009 | #9 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Local $hFile = FileOpen($sIniFileName, 2) FileWrite($hFile, $sIniFileText & @CRLF) FileClose($hFile) ![]() А вот насчёт обыного IniWrite() для записи тут нельзя использовать? Просто интересно. Хотя проблемма помоему, так как поле KEY не существует, хотя это и INI файл поидее... Типа класически было бы так [AddProgram] value = zzzz.exe /verysilent ; но тут не стандарт какой-то. Но полюбому спасибо, так как уже итак работает! |
------- Отправлено: 00:03, 08-04-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ресурсы - [решено] Как заменить курсоры в Windows 7? | antipuh | Оформление Windows 11/ 10 / 8 / 7 / Vista | 5 | 13-04-2010 19:46 | |
[решено] Найти и заменить в текстовом файле. Как? | Pozia | AutoIt | 15 | 11-03-2010 19:12 | |
[решено] Как переместить выделенную строку ListView | malev | AutoIt | 3 | 15-11-2009 12:29 | |
[решено] Как заменить строку [27] в файле? | semiono | AutoIt | 8 | 05-04-2009 02:56 | |
Как заменить строку <input type... | Rustemal | Вебмастеру | 1 | 29-06-2003 15:26 |
|