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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как заменить строку в ENTRIES.INI средствами автоматизации.

Ответить
Настройки темы
[решено] Как заменить строку в ENTRIES.INI средствами автоматизации.

Аватара для semiono

Ветеран


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

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


Изменения
Автор: semiono
Дата: 28-03-2009
Нужно немножко не сложной автоматики, но лучше чтоб кто-то подсказал...
Условия:
Имеется директория в которой файлы:
SVCPACK\
ENTRIES.INI

ENTRIES.INI выглядит так
Код: Выделить весь код
[EditFile]
SVCPACK.INF,SetupHotfixesToRun,AddProgram

[AddProgram]
filename.exe /verysilent
Мне нужно каждый раз положить в папку 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

 

Аватара для volk1234

Старовер


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

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


semiono
Измените название темы. Нынешнее - Архивирование... не соответствует правилам конференции, и не раскрывает вашего вопроса.
Чем быстрее вы сформулируете ваш вопрос, тем быстрее вам помогут. Пример правильного названия Как заменить строку в ENTRIES.INI средствами автоматизации.

-------

Ю-ху!


Отправлено: 09:59, 28-03-2009 | #2



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

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


Аватара для volk1234

Старовер


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

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


Цитата:
Мне нужно каждый раз положить в папку SVCPACK файл с новым именем *.exe и прописать его имя в ENTRIES.INI вместо filename.exe
и после этого запаковать в rar- архив.
Пожалуйста, уточните вопрос.
Что значит каждый раз положить??

-------

Ю-ху!

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

Отправлено: 00:41, 30-03-2009 | #3


Аватара для proxy

Старожил


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

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


список в ini должен обновляться
или дополняться?

Цитата semiono:
rar a newname -ac -m3 -r -t SVCPACK ENTRIES.INI »
именно так?
а не так:
Код: Выделить весь код
rar.exe a filename.exe -ac -m3 -r -t

пример чтения/замены:
Код: Выделить весь код
#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


Аватара для semiono

Ветеран


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

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


А хорошо! Попробую этот пример подогнать!

newname - достаточно, так как рар сам добавляет рсасширение .zip и сам открывается по rar
(zip - более подходит для дистрибутизации, так как он встроен в винду и значится у всех есть)

поясню:
я часто переделываю свои хотфиксы, и папка SVCPACK используется под разные пакеты, в файле
ENTRIES.INI лишь заменяется имя пакета, остальное всё одинаково. Например, "WinRar.exe"
А так как я делаю часто исправление и пакетов много, то хочется автоматизировать это дело.
Причём у меня свои заморочки ещё, я например люблю дату файлов выставлять одинаково
и аттрибуты A тоже сбрасывать.

-------
Полезное сообщение


Отправлено: 16:23, 31-03-2009 | #5


Аватара для semiono

Ветеран


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

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


Мне нужно прочесть имя файла @ScriptDir & "\SVCPACK\*.exe" а не содержимое!
Наверное будет так - FileGetLongName(@ScriptDir & '\SVCPACK\*.exe')
В StringRegExpReplace я конечно запутался ...так как надо отсечь только имя без пути.
Можно бы было просто вписать в четвёртую строку полученный @filename.exe & "/verisilent"
но я что-то не нашёл как установить курсор в нужную строку, чтоб не затирать весь файл от начала?
а с регексп заменой, я опять же не шарю... Думал уже сам смогу, но не получается.
Чтоб не было недразумений -
@ScriptDir & "\SVCPACK\*.exe" - это @имя некого файла, можно и так даже *.* или даже *
@ScriptDir & "\ENTRIES.INI" - этот файл редактируется, в его последнюю строку надо внести
только @имя + /VERYSILENT
Пример:
Код: Выделить весь код
[EditFile]
SVCPACK.INF,SetupHotfixesToRun,AddProgram

[AddProgram]
TBIView.exe /verysilent

-------
Полезное сообщение


Отправлено: 17:18, 31-03-2009 | #6


Аватара для semiono

Ветеран


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

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


Код: Выделить весь код
$x = FileGetShortName(@ScriptDir & "\SVCPACK\*.*",1)
MsgBox(4096,"Test",$x, 10)
Вот блин функция, что напишешь то и вернёт!
Это же тупо, написать в параметре функции путь с именем файла и на выходе его же и получить! 0O

А между тем я так и не понял, чтоли нету способа получить имя файла *.exe в папке svcpack\
Да хоть бы и с путём, хотя я запарюсь отсекать потом лишнее регеспом... ??


Я уже думал сейчас всё получится, но прежняя загвоздка в получении имени ексешнига
Код: Выделить весь код
IniWrite(@ScriptDir & "\ENTRIES.INI","AddProgram","",$name)
Exit
Причём ещё одна неожиданность, интересно пустое поле прокатит? Так как там отсутствует KEY
TBIView.exe /verysilent - сразу идёт!

-------
Полезное сообщение


Отправлено: 22:07, 07-04-2009 | #7


Аватара для proxy

Старожил


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

Профиль | Отправить 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


Аватара для semiono

Ветеран


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

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


Цитата proxy:
но мысли читать очень сложно, к тому же на расстоянии »

-------
Полезное сообщение


Отправлено: 23:27, 07-04-2009 | #9


Аватара для semiono

Ветеран


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

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


Код: Выделить весь код
    Local $hFile = FileOpen($sIniFileName, 2)
    FileWrite($hFile, $sIniFileText & @CRLF)
    FileClose($hFile)
Чуть не так было, ENTRIES.INI лежит рядом с папкой, но не в ней. @CRLF для красоты добавил тоже

А вот насчёт обыного IniWrite() для записи тут нельзя использовать? Просто интересно.
Хотя проблемма помоему, так как поле KEY не существует, хотя это и INI файл поидее...

Типа класически было бы так
[AddProgram]
value = zzzz.exe /verysilent ; но тут не стандарт какой-то.

Но полюбому спасибо, так как уже итак работает!

-------
Полезное сообщение


Отправлено: 00:03, 08-04-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как заменить строку в ENTRIES.INI средствами автоматизации.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ресурсы - [решено] Как заменить курсоры в 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




 
Переход