[Архив - Часть 1.3] AutoIt скрипты

Ответить
Аватара пользователя
biork

[Архив - Часть 1.3] AutoIt скрипты

Сообщение biork »

Внимание!

Тема переведена в архивное состояние






Архивы старых тем по AutoIt
или они же в
7z архиве (версии для печати) - 846 кб


(настоятельно рекомендуется к прочтению/поиску)





Руководство к действию по работе 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) сохраняем все изменения и выводим отчёт о проделанной работе :-)



Заранее благодарен.
Аватара пользователя
amel27

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение amel27 »

biork

п.п.1-4, точно в соответствии с формулировкой (см. примечания):

Код:

Код: Выделить всё

#include 
#include 
$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*.
Аватара пользователя
desperate

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение desperate »

Да забыл указать самое главное, мне надо не только вкладку Сеть -> свойства TCP/IP настроить, но и другие параметры, шифрование, WINS и проче.... вообщем пройтись по всем вклдкам свойств определенного адаптера (т.к. VPN создается для работы с провайдером спутникового интернета)
Аватара пользователя
mpn

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение mpn »

Всем привет!

Поможите, кто может.

Задача простая. Необходимо периодически на удаленном компьютере (под Unix) выполнять ряд команд с дальнейшей обработкой выводимой в консоль информации. Хочу использовать для этого строку $t=Run("telnet","",@SW_HIDE,3) и далее при помощи StdinWrite, StdoutRead работать с открытой консолью. Но почему-то процесс telnet.exe закрывается сразу же после запуска. Где ошибка?
Аватара пользователя
Djons

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение Djons »

Creat0R



Спасибо, буду пробовать.
Аватара пользователя
TERMINAL

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение TERMINAL »

1.У меня вопрос такой...

Можно ли в скрипте написать такую прогу которая будет определять дату записи диска (например, дата записи диска 30.12.2006 программой НЕРО) и если дата не соответствует то выполняется например перезагрузка машины а если дата соответствует, то выполняется к примеру старт файла SETUP.exe?
Аватара пользователя
kalikanzaros

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение kalikanzaros »

есть ли у кого нибудь красивое решение установки alcohol120 а потом сразу lingvo11?

так как пока что у меня все это выглядит достаточно сложно и некрасиво... Изображение



запускаю autoit скрипты из wpi 5.6, который в свое очередь стартует из RunOnceEx.cmd который стартует с CD...

надеюсь про запуск строчка будет понятна Изображение



вот как сейчас это работает у меня: скрипт alcohol120 отрабатывает, а потом команда %reboot%, wpi перезагружает комп, я наивный думал что потом продолжится установка alcohol120, и только затем стартанет lingvo11, но нет, wpi запускается раньше и не дает закончить установку....

конечно можно сделать в 3 строки, что-то типа:

alcoho120.exe (без добавления в автозагрузку скрипта после перезагрузки)

%reboot%

alchol120.exe (скрипт закончит установку)



и потом начнется установка lingvo11, скрипт lingvo11 первым делом запустит установленный alcohol и даст ему секунд 5-10 для создания виртуального CD, после чего alcohol будет закрыт, а установка lingvo11 продолжена...



но мне кажется есть решение проще и красивее, нет ни у кого идей?
Аватара пользователя
Sanja Alone

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение Sanja Alone »

Привет народ... Я в этом деле новичок, но мне нужно сделать автоматизацию не из самых простых (как для меня) Изображение Вообщем помогите плиз чем сможете... Что собственно нужно:

Есть кейген...

1) Нужно его запустить (сделал)

2) Нажать на кнопку Generate (не получилось, но это впринципе не обязательно)

3) Скопировать текст(ключ), который он выдал (тоже непонятно)

4) Затем создать новую запись в реестре по заданному мной пути (ну в данном случае это HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\EA Games\Battlefield 2\ergc)

5) Создать там параметр со стандартным именем (строковый, REG_SZ)

6) Изменить его значение на такое - x9392тотсерийникбезчёрточек

вот собственно и конец... Если никто не сможет помочь по каким либо причинам то расскажите хотя бы как делать вышеперечисленные операции Изображение Заранее спасибо !!!
Аватара пользователя
Diamond

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение Diamond »

Creat0R


Цитата:



Ещё один способ получить список существующих дисков на компьютере:



Интересный вариант! Как-то мне пришлось использовать перебор A-Z, но только в пакетном файле, поскольку другой альтернативы в батниках просто нет.

Вот ещё один способ, сделано через VBScript



Код:

Код: Выделить всё

#CS
тип ресурса:
0 - неизвестное устройство
1 - устройство со сменным носителем.
2 - жёсткий диск.
3 - сетевой диск.
4 - CD-ROM.
5 - RAM-диск.
#CE
Dim $fso, $d, $dc, $s
$fso = ObjCreate("Scripting.FileSystemObject")
$dc = $fso.Drives
	For $d In $dc
		If $d.DriveType = "2" Then
			$s = $s & $d.DriveLetter & ": "
		EndIf
	Next
MsgBox(0,"",$s)
Аватара пользователя
papik_bat

Re: [Архив - Часть 1.3] AutoIt скрипты

Сообщение papik_bat »

Здрасьте всем.

Вот история моей болезни:

я написал батник для автоматической рассылки писем, когда он срабатывает, то появляеться окно аутглюк с предуприждением, что программа пытаеться сама отправить письмо и т.д.. На нужную кнопку в этом окне я нажимал скриптом Autoit.


Код: Выделить всё

Opt("TrayIconHide", 1)

WinWaitActive("Microsoft Office Outlook")

Sleep(6000)

ControlClick("Microsoft Office Outlook", "", "Button4")

Send("{ENTER}")



Все работало нормально, но последнее время если компьютер заблакированн мой "нажиматель" не срабатывает, так как окно аутглюка стало теперь не активным. на писал такой скрипт:




 
 Код: [url=#][/url]
 [code]Opt("TrayIconHide", 1)
If WinWait("Microsoft Office Outlook") then
WinActivate("Microsoft Office Outlook","")
WinWaitActive("Microsoft Office Outlook")
Sleep(6000)
ControlClick("Microsoft Office Outlook", "", "Button4")
Send("{ENTER}")
EndIf

Но проблема не решилась, если комп заблокированн окно не активируеться и кнопка не нажимаеться.



Кто виноват? Что делать?
Ответить

Вернуться в «AutoIt»