![]() |
Как заменить строку в ENTRIES.INI средствами автоматизации.
Нужно немножко не сложной автоматики, но лучше чтоб кто-то подсказал...
Условия: Имеется директория в которой файлы: SVCPACK\ ENTRIES.INI ENTRIES.INI выглядит так Код:
[EditFile] и после этого запаковать в rar- архив. rar a newname -ac -m3 -r -t SVCPACK ENTRIES.INI Самое сложное наверное для меня заменить строку в ENTRIES.INI. Хотя и получить переменную прочитав SVCPACK\*.exe наверное тоже не просто? |
semiono
Измените название темы. Нынешнее - Архивирование... не соответствует правилам конференции, и не раскрывает вашего вопроса. Чем быстрее вы сформулируете ваш вопрос, тем быстрее вам помогут. Пример правильного названия Как заменить строку в ENTRIES.INI средствами автоматизации. |
Цитата:
Что значит каждый раз положить?? |
список в ini должен обновляться
или дополняться? Цитата:
а не так: Код:
rar.exe a filename.exe -ac -m3 -r -t пример чтения/замены: Код:
#region: - Option |
А хорошо! Попробую этот пример подогнать!
newname - достаточно, так как рар сам добавляет рсасширение .zip и сам открывается по rar (zip - более подходит для дистрибутизации, так как он встроен в винду и значится у всех есть) поясню: я часто переделываю свои хотфиксы, и папка SVCPACK используется под разные пакеты, в файле ENTRIES.INI лишь заменяется имя пакета, остальное всё одинаково. Например, "WinRar.exe" А так как я делаю часто исправление и пакетов много, то хочется автоматизировать это дело. Причём у меня свои заморочки ещё, я например люблю дату файлов выставлять одинаково и аттрибуты A тоже сбрасывать. |
Мне нужно прочесть имя файла @ScriptDir & "\SVCPACK\*.exe" а не содержимое!
Наверное будет так - FileGetLongName(@ScriptDir & '\SVCPACK\*.exe') В StringRegExpReplace я конечно запутался :( ...так как надо отсечь только имя без пути. Можно бы было просто вписать в четвёртую строку полученный @filename.exe & "/verisilent" но я что-то не нашёл как установить курсор в нужную строку, чтоб не затирать весь файл от начала? а с регексп заменой, я опять же не шарю... Думал уже сам смогу, но не получается. Чтоб не было недразумений - @ScriptDir & "\SVCPACK\*.exe" - это @имя некого файла, можно и так даже *.* или даже * @ScriptDir & "\ENTRIES.INI" - этот файл редактируется, в его последнюю строку надо внести только @имя + /VERYSILENT Пример: Код:
[EditFile] |
Код:
$x = FileGetShortName(@ScriptDir & "\SVCPACK\*.*",1) Это же тупо, написать в параметре функции путь с именем файла и на выходе его же и получить! 0O А между тем я так и не понял, чтоли нету способа получить имя файла *.exe в папке svcpack\ Да хоть бы и с путём, хотя я запарюсь отсекать потом лишнее регеспом... ?? Я уже думал сейчас всё получится, но прежняя загвоздка в получении имени ексешнига Код:
IniWrite(@ScriptDir & "\ENTRIES.INI","AddProgram","",$name) TBIView.exe /verysilent - сразу идёт! |
Код:
#region: - Option но мысли читать очень сложно, к тому же на расстоянии ))) попробуйте более точно излагать вопросы, пример: 1. Как узнать имена всех файлов в папке. 2. Как записать имя первого найденного файла, из пункта 1, в ini файл, структура ini <такая-то>, в строку ini файла <такую-то> в <такой-то форме>, сам ini файл находится <там-то>. и т.д. необязательно именно так, но чуть более конкретнее, тал легче ответить ))) |
Цитата:
|
Код:
Local $hFile = FileOpen($sIniFileName, 2) А вот насчёт обыного IniWrite() для записи тут нельзя использовать? Просто интересно. Хотя проблемма помоему, так как поле KEY не существует, хотя это и INI файл поидее... Типа класически было бы так [AddProgram] value = zzzz.exe /verysilent ; но тут не стандарт какой-то. Но полюбому спасибо, так как уже итак работает! |
Пожалуйста, добейте этот скрипт?
Нужны ещё две команды -> FileDelete(@ScriptDir & $sFileName) ; это не обязательно, но желательно. И главное для архивации -> ShellExecute(@SystemDir & "\rar.exe", "a" & $sFileName & "-ac -m3 -r -t SVCPACK ENTRIES.INI", @ScriptDir, "", @SW_HIDE) Хотя тут сложность в замене расширения .exe на .zip если брать $sFileName из в вашей функции. Я сколько возился, никак не могу сам зделать... В общем виде примерно такое нужно. Код:
Global $sIniFileName = 'entries.ini' |
Код:
Global $sIniFileName = 'entries.ini' Про архивацию не понял, расскажите подробней. Как / куда / откуда / что и кто / дожен архивироваться ... |
![]() WinRAR.zip содержит: */SVCPACK/WinRAR.exe */ENTRIES.INI rar.exe лежит в %пути%, как это и положенно в system32, если с этим что не понятно вдруг. Всё происходит в @ScriptDir, файлик ENTRIES.au3 - это я так назвал автоит... когда зделаю основательно перегоню в EXE. Ну а вся заморочка как обычно, чтоб различные имена подставлять. Например, в другой раз имя архива и экзешника будут другими, не WinRAR, а скажем SVCPACK\WinRoll.exe и > WinRoll.zip Команда паковки была полностью правильная ShellExecute(@SystemDir & "\rar.exe", "a " & $var &".zip -ac -m3 -r -t SVCPACK ENTRIES.INI", @ScriptDir, "", @SW_HIDE) если только $var определить, с чем я не справляюсь. В консоли так: # rar.exe a WinRAR.zip -ac -m3 -r -t SVCPACK ENTRIES.INI Совсем было бы хорошо потом ещё и скопировать (после создания архива) @ScriptDir & "\SVCPACK\WinRAR.exe" в "D:\Apps" ; хранилище бинарей. @ScriptDir & "\WinRAR.zip" в "D:\Patch" ; моё хранилище хотфиксов :) Так как тут снова понадобиться каждый раз менять имя, то есть WinRAR нельзя оставить... Но я могу обойтись. Хотяб запаковать автоматически :) Сразу забыл сказать, удаление архива нужно лишь для чистоты работы, как бы предостережение от создания архива поверх архива... Хотя впринципе это возможно, но как бы грязная работа... Если архивы перетаскивать скриптом в хранилище, то можно и не зачищать скрипт директорию тогда. Может что-то и не понятно всёравно? Я объясню. И спасибо, что уже облегчили мне рутинный труд. |
работаю со вчеращено утра, читаю и понимаю - что ни чего не понимаю :)
проверьте так: Код:
Global $sIniFileName = 'entries.ini' |
ошибка Run(@SystemDir & '\rar.exe', 'a' ...
надо так ShellExecute(@SystemDir & '\rar.exe', 'a ' ... Екзешник полетел туда, куда надо успешно! :) А вот zip почему-то в скрипт директории остаётся. Я подумаю над этим... Спасибо!!!!! Но мне странно, почему здесь FileCopy как FileMove работает? Какраз FileMove мне более подходит! :) Кажись, Sleep() надо добавить под архивацией... Теперь оно успевает, но архив действительно копируется, а экзешник полностью перемещается из C:\SVCPACK в D:\Apps! Пока это загадка для мну... где-то баг затаился :) |
недоглядел, надо так:
Код:
Run(@SystemDir & '\rar.exe a' & $sFileNameZIP & ' -ac -m3 -r -t SVCPACK ENTRIES.INI', @ScriptDir, @SW_HIDE) Цитата:
Цитата:
Цитата:
а так, все что в папке SVCPACK, удаляется вот этой строчкой: _FindFile('del') если кроме EXE и ZIP файла удалять больше ничего не нужно, то _FindFile('del') можно не использовать, а использовать только FileMove |
Вообщем, я не сразу заметил _FindFile('del'), и думал что файлы зачищаются перемещением,
что собсно и выгодней было бы в моём случае. Закоментировал _FindFile('del'), переправил все FileCopy на FileMove, заменил Run() на ShellExecuteWait() Получилось то, что хотел! Ура! Отличная работа! Труд не зря, спасибо! Такие скрипты надо собирать в коллекцию! :) |
Практически готовый конструктор для паковки хотфиксов :)
Вот что получилось: Код:
Global $sDirAppsPath = '.\Apps' |
Время: 09:47. |
Время: 09:47.
© OSzone.net 2001-