|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты |
|
|
[Архив - Часть 1.3] AutoIt скрипты
|
|
Старожил Сообщения: 250 |
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе 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 | |
|