|
Компьютерный форум 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 |
Новый участник Сообщения: 43
|
Профиль | Отправить PM | Цитировать Интересует взлом скомпилированного AutoIt .exe. Можно или нет это сделать, если при компиляции был выставлен пароль или убрана галка позволяющая декомпилировать?
|
Отправлено: 16:11, 15-05-2007 | #401 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать storm2005
Цитата:
|
|
------- Отправлено: 17:25, 15-05-2007 | #402 |
Новый участник Сообщения: 43
|
Профиль | Отправить PM | Цитировать Цитата:
интересует этот вопрос т. к. хочу устанавливать некоторый софт через логонный скрипт юзера. но проблема в том, что под юзером большинство софта не ставится т. к. юзер не обладает административными правами. в AutoIt нашел замечательную функцию RunAsSet в которой можно передать пароль в отличие от команды runas. но хотелось быть уверенным, что скомпилировав скрипт под паролем его никто не декомпилирует. |
|
Отправлено: 10:02, 16-05-2007 | #403 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать storm2005
Цитата:
Цитата:
|
||
Отправлено: 17:12, 16-05-2007 | #404 |
Ветеран Сообщения: 825
|
Профиль | Отправить PM | Цитировать storm2005
Цитата:
ALL Последнее время при адаптации скриптов под новые версии программ наталкиваюсь на странное поведение AutoIT. А именно при выполнении команды ControlClick как бы не происходит отработки нажатия кнопки. Например это началось в Wintools Net Pro начиная с версии после 8.1.1 Есть такой же проблемный кусок и в установке OutPost (вернее он всегда там был) WinWaitActive("Configuration Wizard","") $text = WinGetText("Configuration Wizard","") If StringRegExp($text,"Some applications that can cause system stability issues") Then If Not WinActive("Configuration Wizard","Some applications that can cause system stability issues") Then WinActivate("Configuration Wizard","Some applications that can cause system stability issues") WinWaitActive("Configuration Wizard","Some applications that can cause system stability issues") Send("{TAB}{ENTER}") EndIF If StringRegExp($text,"Advanced security") Then If Not WinActive("Configuration Wizard","Advanced security") Then WinActivate("Configuration Wizard","Advanced security") WinWaitActive("Configuration Wizard","Advanced security") Sleep(30) ControlClick("Configuration Wizard","Advanced security","Button3") Sleep(30) Send("{ENTER}") EndIF Может кто-то уже решал такую проблему?! Может как-то можно задавать длительность нажатия кнопки?! |
|
Отправлено: 22:22, 16-05-2007 | #405 |
Старожил Сообщения: 260
|
Профиль | Отправить PM | Цитировать В обсуждаемом продукте вроде есть запись макросов - как это можно осуществить и можно ли?
|
Отправлено: 20:17, 17-05-2007 | #406 |
Старожил Сообщения: 205
|
Профиль | Отправить PM | Цитировать Имеется каталог CutDir. в нем куча файлов. Есть файл (file.txt) содержащий строки вида:
C:\Compare\CutDir\Bin\SD0405.dll C:\Compare\CutDir\Bin\LOA\SD0434.dll C:\Compare\CutDir\WEZ\BIGz\erwg.dll Как правильнее удалить из каталога все файлы, не содержащиеся в списках? Пробовал $line = FileReadLine($file) FileMove ($CutDir & $line2, $DestDir & $line2, 0) Работает, только для файлов в корне каталога CutDir, т.е. он не создает автоматически вложенные каталоги при копировании. А мне нужно оставить только файлы, перечисленные в списке, причем и во всех вложенных каталогах тоже. |
Отправлено: 20:48, 17-05-2007 | #407 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать VelDmi
amel27 как то написал функцию возвращающую массив дерева каталогов включая подкаталоги, с её помощью эту задачу реализовать довольно просто: #include <Array.au3> #include <File.au3> ;Создаём нужные переменные и массив для содержания списка файлов которые удалять не нужно $Dir = "CutDir" $ExcludeListFile = "file.txt" Dim $ExcludeListArr[1] ;Получаем массив структуры каталогов в папке "CutDir" (из переменной $Dir) $DirsArray = _DirListToArray($Dir) ;Получаем массив со списком файлов которые не нужно удалять (из файл от переменной $ExcludeListFile).. _FileReadToArray($ExcludeListFile, $ExcludeListArr) ;Проходим по массиву структуры каталогов, получаем массив со списком файлов в каждом каталоге, и удаляем файлы не находящиеся в списке. For $i = 1 To UBound($DirsArray)-1 ;Получаем массив со списком файлов текущего каталога... $InDirFilesArr = _FileListToArray($DirsArray[$i], "*.*", 1) ;Если в текущем каталоге найдены файлы, то проходимся по массиву и ищем текущий элемент в массиве списка исключенных файлов. If IsArray($InDirFilesArr) Then For $iF = 1 To UBound($InDirFilesArr)-1 ;Поиск элемента (текущего файла включая полный путь)... $SearchInArr = _ArraySearch($ExcludeListArr, $DirsArray[$i] & "\" & $InDirFilesArr[$iF]) ;Если не найден, то удаляем файл... If $SearchInArr = -1 Then FileDelete($DirsArray[$i] & "\" & $InDirFilesArr[$iF]) Next EndIf Next ;Функция возвращает массив структуры подкаталогов Func _DirListToArray ($sPath) Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2) If IsArray ($alist) Then For $i=1 To $alist [0] _ArrayAdd ($rlist, $sPath & "\" & $alist [$i]) $blist = _DirListToArray ($sPath & "\" & $alist [$i]) If $blist[0]>0 Then For $j=1 To $blist [0] _ArrayAdd ($rlist, $blist [$j]) Next EndIf Next EndIf $rlist [0] = UBound ($rlist) - 1 Return $rlist EndFunc Я не тестировал скрипт, написал на скорую руку. |
------- Отправлено: 21:46, 17-05-2007 | #408 |
Старожил Сообщения: 205
|
Профиль | Отправить PM | Цитировать Creat0R
Уфф, мне не дано такое понять... Написал сам через попу, но работает вроде: RunWait (@COMSPEC & ' /c fsum.exe -r -d".\CutDir" *.* > sums.md5', @ScriptDir, @SW_HIDE) ;через эту прогу создается список файлов $filesums = FileOpen(@ScriptDir& '\sums.md5', 0) If $filesums = -1 Then MsgBox(0, "Ошибка.", "Не могу открыть файл sums.md5") Exit EndIf $filesums2 = FileOpen(@ScriptDir& '\sums2.md5', 0) If $filesums2 = -1 Then MsgBox(0, "Ошибка.", "Не могу открыть файл sums2.md5") Exit EndIf While 1 $i = FileReadLine($filesums2) If @error = -1 Then ExitLoop $Count2 = $Count2 + 1 WEnd FileClose($filesums2) While 1 $line = FileReadLine($filesums) If @error = -1 Then ExitLoop If StringLeft ($line, 1) = ';' Then ContinueLoop $filesums2 = FileOpen(@ScriptDir& '\sums2.md5', 0) $Del = 1 For $i = 1 To $Count2 If $line = FileReadLine($filesums2) Then $Del = 0 ExitLoop EndIf Next If $Del = 1 Then FileDelete ($CutDir & StringTrimLeft( $line, 34 )) FileClose($filesums2) WEnd FileClose($filesums) |
Отправлено: 22:30, 17-05-2007 | #409 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать VelDmi
Цитата:
Вот превратил всё это дело в функцию, теперь проверил работоспособность, вроде работает Переменная $ExcludeList также может иметь сразу список файлов для исключения, вот пример - $ExcludeList = "C:\CutDir\test.txt|C:\CutDir\test2.txt" - файлы C:\CutDir\test.txt и C:\CutDir\test2.txt не будут тронуты функцией. Также можно передать во второй параметр функции _DeleteFilesWithExcludes() массив содержащий список файлов для исключения, ну и как показанно в примере, поддерживается и обычный путь к файлу, с которого будет браться список исключении. При успешной операции, возвращает @extended, макрос будет содержать число файлов которые были удалены (именно удалены, не просто количество файлов в соответствии со списком исключении). #include <Array.au3> #include <File.au3> $Dir = @ScriptDir & "\CutDir" ;Эта переменная может быть массивом, полным списком файлов исключении (разделённый через |), ;а так-же это можт быть путь к файлу содержащий список файлов которые будут исключены при удалении. $ExcludeList = @ScriptDir & "\file.txt" ;Пример переменной - "c:\CutDir\test.txt|c:\CutDir\test2.txt" ... и т.д _DeleteFilesWithExcludes($Dir, $ExcludeList) If Not @error Then MsgBox(262144+64, "Finish", "Было удалено <" & @extended & "> файлов") ;Функция для удаления файлов из всех подкаталогов заданного каталога, в соответствии со списком исключении. Func _DeleteFilesWithExcludes($sPath, $ExcludeList) Local $ExcludeListArr[1], $Extended = 0 ;Если не существует каталога (в котором следует производить удаление) или переменная $sPath не является каталогом, ;возвращаем ошибку №1. If Not StringInStr(FileGetAttrib($sPath), "D") Then Return SetError(1, 0, 0) ;Получаем массив структуры каталогов в папке "CutDir" (из переменной $Dir) Local $DirsArray = _DirListToArray($sPath) If Not IsArray($ExcludeList) And FileExists($ExcludeList) Then ;Получаем массив со списком файлов которые не нужно удалять (из файл от переменной $ExcludeList).. _FileReadToArray($ExcludeList, $ExcludeListArr) ElseIf IsString($ExcludeList) And StringInStr($ExcludeList, "|") Then ;Превращаем переменную в массив (разделяя этим символом |) $ExcludeListArr = StringSplit($ExcludeList, "|") ElseIf IsArray($ExcludeList) Then ;Присваиваем внутреннему массиву (ранее созданному) то же значение что и у массива $ExcludeList $ExcludeListArr = $ExcludeList Else ;Не предвиденная ошибка, передана пустая переменная или неверный формат массива/переменной - возвращаем ошибку №2. Return SetError(2, 0, 0) EndIf ;Получаем массив со списком файлов корневого каталога ($sPath)... $RootFilesArr = _FileListToArray($sPath, "*.*", 1) If IsArray($RootFilesArr) Then For $iR = 1 To UBound($RootFilesArr)-1 ;Поиск элемента (текущего файла включая полный путь)... $SearchInArr = _ArraySearch($ExcludeListArr, $sPath & "\" & $RootFilesArr[$iR]) ;Если не найден, то удаляем файл... If $SearchInArr = -1 Then $Extended += FileDelete($sPath & "\" & $RootFilesArr[$iR]) Next EndIf ;Проходим по массиву структуры каталогов, получаем массив со списком файлов в каждом каталоге, ;и удаляем файлы не находящиеся в списке. For $i = 1 To UBound($DirsArray)-1 ;Получаем массив со списком файлов текущего каталога... $InDirFilesArr = _FileListToArray($DirsArray[$i], "*.*", 1) ;Если в текущем каталоге найдены файлы, то проходимся по массиву и ищем текущий элемент в массиве списка исключенных файлов. If IsArray($InDirFilesArr) Then For $iF = 1 To UBound($InDirFilesArr)-1 ;Поиск элемента (текущего файла включая полный путь)... $SearchInArr = _ArraySearch($ExcludeListArr, $DirsArray[$i] & "\" & $InDirFilesArr[$iF]) ;Если не найден, то удаляем файл... If $SearchInArr = -1 Then $Extended += FileDelete($DirsArray[$i] & "\" & $InDirFilesArr[$iF]) Next EndIf Next Return SetError(0, $Extended, 1) EndFunc ;Функция возвращает массив структуры подкаталогов Func _DirListToArray ($sPath) Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2) If IsArray ($alist) Then For $i=1 To $alist [0] _ArrayAdd ($rlist, $sPath & "\" & $alist [$i]) $blist = _DirListToArray ($sPath & "\" & $alist [$i]) If $blist[0]>0 Then For $j=1 To $blist [0] _ArrayAdd ($rlist, $blist [$j]) Next EndIf Next EndIf $rlist [0] = UBound ($rlist) - 1 Return $rlist EndFunc |
|
------- Отправлено: 23:41, 17-05-2007 | #410 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|