|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты |
|
[Архив - Часть 1.3] AutoIt скрипты
|
Старожил Сообщения: 250 |
Профиль | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь. Вот что нужно сделать последовательно: 1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1 2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1 3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n) 4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5 5) сохраняем все изменения и выводим отчёт о проделанной работе :-) Заранее благодарен. |
|
Отправлено: 05:05, 03-12-2006 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать biork
п.п.1-4, точно в соответствии с формулировкой (см. примечания): #include <File.au3> #include <Array.au3> $DIR1 = 'C:\DIR1' _FilesDelete ($DIR1, '*text_1*') $DIR2 = 'C:\DIR2' _FileLinesDelete ($DIR2 & '\' & 'xxx.sif', 'text_1') $DIR3 = 'C:\DIR3' Dim $Lines3 [3] = ['text_2', 'text_3', 'text_n'] _InfSectionAddLines ($DIR3 & '\' & 'xxx.inf', 'XXX', $Lines3) $DIR4 = 'C:\DIR4' _InfSectionReplaceText ($DIR4 & '\' & 'yyy.inf', 'YYY', 'text_4', 'text_5') ; Удаление файлов в заданном каталоге по маске. ; Возвращает количество удаленных файлов. Func _FilesDelete ($sPath, $sFilter) Local $aFiles, $i $aFiles = _FileListToArray ($sPath, $sFilter, 1) If IsArray ($aFiles) Then For $i=1 To $aFiles [0] FileDelete ($sPath & '\' & $aFiles [$i]) Next Return $i-1 Else Return 0 EndIf EndFunc ; Удаление строк файла по условию вхождения заданного текста ; Возвращает: 1 - успех, 0 - ошибка. Коды ошибок: ; 1 - ошибка чтения файла; ; 2 - ошибка сохранения файла. Func _FileLinesDelete ($sFilePath, $sEntry) Local $aFileLines, $i If _FileReadToArray ($sFilePath, $aFileLines) Then For $i = $aFileLines [0] To 1 Step -1 If StringInStr ($aFileLines [$i], $sEntry) Then _ArrayDelete ($aFileLines, $i) Next If _FileWriteFromArray ($sFilePath, $aFileLines, 1) Then Return 1 Else SetError (2) Return 0 EndIf Else SetError (1) Return 0 EndIf EndFunc ; Добавление заданного массива строк в секцию INF-файла ; Возвращает: 1 - успех, 0 - ошибка. Коды ошибок: ; 1 - переданный параметр не является массивом; ; 2 - выход за границы индекса; ; 3 - ошибка чтения файла; ; 4 - не найдена секция; ; 5 - ошибка сохранения файла. Func _InfSectionAddLines ($sFilePath, $sSectionName, ByRef $aNewLines, $iStartIndex=0) Local $aFileLines, $i If Not IsArray ($aNewLines) Then SetError (1) Return 0 EndIf If $iStartIndex >= UBound($aNewLines) Then SetError (2) Return 0 EndIf If _FileReadToArray ($sFilePath, $aFileLines) Then Local $iStart = _ArraySearch ($aFileLines, '[' & $sSectionName & ']', 1) If $iStart = -1 Then SetError (4) Return 0 EndIf For $i = UBound ($aNewLines)-1 To $iStartIndex Step -1 _ArrayInsert ($aFileLines, $iStart+1, $aNewLines [$i]) Next If _FileWriteFromArray ($sFilePath, $aFileLines, 1) Then Return 1 Else SetError (5) Return 0 EndIf Else SetError (3) Return 0 EndIf EndFunc ; Замена текста в пределах заданной секции INF-файла ; Возвращает: 1 - успех, 0 - ошибка. Коды ошибок: ; 1 - ошибка чтения файла; ; 2 - не найдена секция; ; 3 - ошибка сохранения файла. Func _InfSectionReplaceText ($sFilePath, $sSectionName, $sTextFrom, $sTextTo) Local $aFileLines, $i If _FileReadToArray ($sFilePath, $aFileLines) Then Local $iStart = _ArraySearch ($aFileLines, '[' & $sSectionName & ']', 1) If $iStart = -1 Then SetError (2) Return 0 EndIf Local $iFinal = _ArraySearch ($aFileLines, '[', $iStart +1) If $iFinal = -1 Then $iFinal = $aFileLines [0] If $iFinal > $iStart Then For $i = $iStart+1 To $iFinal $aFileLines [$i] = StringReplace ($aFileLines [$i], $sTextFrom, $sTextTo) Next If _FileWriteFromArray ($sFilePath, $aFileLines, 1) Then Return 1 Else SetError (3) Return 0 EndIf EndIf Else SetError (1) Return 0 EndIf EndFunc - INF-файл не просто текст, поэтому корректней говорить о переопределении параметров секции, а не "замене текста"; - соответственно, по п.4 возможно имелась ввиду замена строк целиком, а не вхождений текста; - секции могут не отличаться от INI-файлов, в этом случае можно задействовать встроенные ф-ции AutoIT INI*. |
Последний раз редактировалось amel27, 04-12-2006 в 05:54. Отправлено: 08:21, 03-12-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать 2Creat0R
Не совсем так,точнее совсем не так Дать ссылку на картинку(системную,т.е на ту которая находится в системе по умолчанию,например в папке system32) это легко. Мне надо чтобы картинка интегрировалась внутрь скрипта,с расположением которое ей указано и всегда была там,независимо от того есть такая картинка в системе или нет. |
Отправлено: 08:30, 04-12-2006 | #3 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:24, 04-12-2006 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать biork
Цитата:
|
||
Отправлено: 12:47, 04-12-2006 | #5 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать amel27
С пользовательскими функциями разобрался. Пришлось, всего-лишь, переустановить AutoIt... Что касаеися самого скрипта: 1) Удаление файлов в заданном каталоге по маске - работает! 1.2) Возвращает количество удаленных файлов - где и как посмотреть? 2) Удаление строк файла по условию вхождения заданного текста - работает! 2.1) Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - так же не знаю где их увидеть. 3) Добавление заданного массива строк в секцию INF-файла - не работает... 3.1) Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - очень хотелось бы их посмотреть... 4) Замена текста в пределах заданной секции INF-файла - не работает... 4.1) В чём ошибка - так же не видно... Я понимаю, что всё от криворукости... но всё же? :-) Ещё вопрос: строки text_2, text_3, text_n, а так же text_4 и text_5 содержат всякие знаки припинания (запятаи, кавычки, скобки и пр.). Может, нужно принимать какие то дополнительные меры, что бы всё это правильно было интерпритировано? в 4 пункте, действительно можно бы было не менять текст, а изменить значение параметра. |
Отправлено: 08:50, 05-12-2006 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать А нет ли для AutoIt какой-нибудь рисовалки форм?
А то очень долго координаты с "дизайн-макета" списывать.. |
Отправлено: 09:41, 05-12-2006 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать biork
Цитата:
; ... $DIR3 = 'C:\DIR3' Dim $Lines3 [3] = ['text_2', 'text_3', 'text_n'] $ret = _InfSectionAddLines ($DIR3 & '\' & 'xxx.inf', 'XXX', $Lines3) If $ret Then MsgBox (64, 'Собщение', 'Операция завершена без ошибок.') Else MsgBox (16, 'Ошибка', "Код ошибки: " & @error) EndIf ; ... Цитата:
|
||
Последний раз редактировалось amel27, 05-12-2006 в 13:09. Отправлено: 11:22, 05-12-2006 | #8 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:38, 05-12-2006 | #9 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать biork
Извиняюсь, очепятку исправил... |
Отправлено: 13:11, 05-12-2006 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|