Скриптинг на AUTOIT
|
|
asmadeus | Дата: Понедельник, 16.12.2013, 16:44 | Сообщение № 1 |
|
Скриптинг на AUTOIT
Тема для вопросов и ответов по написанию скриптов на autoit'e - стремительно набирающем популярность языке автоматизации выполнения рутинных дел при работе на компьютере.
Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:01 |
|
| |
Andrey_A | Дата: Среда, 14.03.2018, 04:09 | Сообщение № 76 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, у меня во всех утилитах нет #RequireAdmin - когда-то сталкивался с какими-то проблемами (с какими уже не помню)
Цитата asmadeus ( ) Как можно поступить, можно ли указать, какой форме давать админа или нет? Нет, тут либо-либо.
.
|
|
| |
asmadeus | Дата: Четверг, 17.01.2019, 19:26 | Сообщение № 77 |
|
Голову сломал, но не понимаю.... Есть список файлов вида:
Код ashampoo_snap_10.0.7.zip auslogics_boostspeed_10.0.22.0.zip beyond_compare_4.2.8.23479.zip extreme_picture_finder_3.42.8.0.zip goodsync_enterprise_10.9.21.6.zip Часть обработки такая:
Код .................................................................................. $arFileList=_FO_FileSearch ( $sPathAppsINI, '*,exe|*.rar|*.zip', True, 0 , 1 , 1 , 1, '', '', '') - тут я читаю именно папку, содержащею файлы ................................................................................. For $i=1 To $arFileList[0] - перебор и обработка по порядку в цикле $aFileList[$i][0]=StringRegExpReplace($arFileList[$i],'(.*)\\(.*)\.(.*)','\2') - первая колонка массива - имя файла без расширения $aFileList[$i][1] = StringReplace(StringRegExpReplace($aFileList[$i][0],'(.*)\_([\d+\.]+)','\1'),'_',' ') - вторая колонка - буквенная часть, т.е название программы $aFileList[$i][2]= StringRegExpReplace($aFileList[$i][0],'(.*)\_([\d+\.]+)','\2') - третья колонка - версия программы $aFileList[$i][3]= IniRead($BuildIni, "Apps", $aFileList[$i][1], "qqqqq") - четвертая колонка - в ini файле в секции Apps найти буквенную часть и выдать ее значение
Вот из этого всего именно чтение ini файла и не проходит. Если пишу так:
Код $aFileList[$i][3]= IniRead($BuildIni, "Apps", "beyond compare", "qqqqq") то есть название напрямую, то нормально находит и читает. Что может быть не так?
|
|
| |
asmadeus | Дата: Понедельник, 28.01.2019, 20:06 | Сообщение № 78 |
|
Кошмар, а в голову то путного ничего не лезет(
|
|
| |
Andrey_A | Дата: Вторник, 05.02.2019, 11:10 | Сообщение № 79 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
|
В $arFileList[$i] закрадывается в начале перенос строки Поставил
Код $arFileList[$i]=StringRegExpReplace($arFileList[$i],'[\r\n]*','')
Код #include <Array.au3> ; для _ArrayDisplay #include <FileOperations.au3>
$BuildIni='D:\Test\59903284\Tast.ini' $sPathAppsINI='D:\Test\59903284\' $arFileList=_FO_FileSearch ( $sPathAppsINI, '*,exe|*.rar|*.zip', True, 0 , 1 , 1 , 1, '', '', '') ; - тут я читаю именно папку, содержащею файлы _ViewValues($arFileList,'$arFileList ~ Файл New_1416.au3 ~~ Строка 4') Local $max=$arFileList[0],$aFileList[$max+1][9]=[[$max]] ; _ViewValues($aFileList,'$aFileList ~ Файл New_1416.au3 ~~ Строка 8') ; ................................................................................. For $i=1 To $arFileList[0] ; - перебор и обработка по порядку в цикле MsgBox(4096,"Переменная $arFileList[$i]","Файл New_1416.au3 ~~ Строка 12"&@CRLF&"$arFileList[$i] =>"&$arFileList[$i]&"<=") $arFileList[$i]=StringRegExpReplace($arFileList[$i],'[\r\n]*','') $aFileList[$i][0]=StringRegExpReplace($arFileList[$i],'(.*)\\(.*)\.(.*)','\2') ; - первая колонка массива - имя файла без расширения $aFileList[$i][1]=StringReplace(StringRegExpReplace($aFileList[$i][0],'(.*)\_([\d+\.]+)','\1'),'_',' ') ; - вторая колонка - буквенная часть, т.е название программы $aFileList[$i][2]=StringRegExpReplace($aFileList[$i][0],'(.*)\_([\d+\.]+)','\2') ; - третья колонка - версия программы $aFileList[$i][3]=IniRead($BuildIni, 'Apps', $aFileList[$i][1], "qqqqq") ; - четвертая колонка - в ini файле в секции Apps найти буквенную часть и выдать ее значение Next _ViewValues($aFileList,'$aFileList ~ Файл New_1416.au3 ~~ Строка 13')
.
|
|
| |
asmadeus | Дата: Понедельник, 22.07.2019, 21:52 | Сообщение № 80 |
|
Привет. А вот реально ли сделать просмотр тем как в тотале?
Хотелось бы доработать скрипт. Через день - два выложу исходник (когда вырежу лишнее). Вроде -ListView - есть - закраска его чередующимся цветами (при наличии этой настройки в теме ) - есть Имеющиеся проблемы: -курсор в стиле windows -инверсный курсор -инверсное выделение
Эти параметры по одиночке вроде и отображаются, а вот в комбинации - ну вообще нет
|
|
| |
asmadeus | Дата: Среда, 31.07.2019, 07:08 | Сообщение № 81 |
|
Добавлен архив
|
|
| |
asmadeus | Дата: Воскресенье, 10.11.2019, 20:27 | Сообщение № 82 |
|
Привет. Помогите понять. Есть функция копирования-перемещения файлов-папок по маске. Но вот с программой teamviewer она что то косячит (с 11 файлов копирует только 5, хотя список формируется правильно)
Код #Include <FileOperations.au3> #Include <Array.au3> _copmov ('Copy', 2, 'd:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer', 'TeamViewer.exe|TeamViewer.ini|TeamViewer_Desktop.exe|TeamViewer_Resource_en.dll|TeamViewer_Resource_ru.dll|TeamViewer_Resource_uk.dll|TeamViewer_StaticRes.dll|tv_w32.dll|tv_w32.exe|tv_x64.dll|tv_x64.exe', True, 'd:\Hlam\test\copmov\final')
; Функция копирования/перемещения файлов и папок по маске ; $iMod - копирование или перемещение ; $iOp - файлы или папки ; $sP - источник ; $sM - маска имен (через |) ; $iInc - глубина вложенности ; $sD - путь назначения Func _copmov ($iMod, $iOp, $sP, $sM, $iInc, $sD) If $sM = "Def" Then $sM = "*" Switch $iOp Case '1' $aFolder = _FO_FolderSearch($sP, $sM, $iInc, 0, 1, 1) If IsArray($aFolder) Then For $i=1 To $aFolder[0] If FileExists ($aFolder[$i]) Then Switch $iMod Case "Copy" DirCopy ($aFolder[$i], $sD, 1) Case "Move" DirMove ($aFolder[$i], $sD, 1) EndSwitch EndIf Next EndIf Case '2' $sM = _FO_CorrectMask ($sM) $aFiles = _FO_FileSearch($sP, $sM, $iInc, 0, 1, 1) If IsArray($aFiles) Then For $i=1 To $aFiles[0] If FileExists ($aFiles[$i]) Then Switch $iMod Case "Copy" _ArrayDisplay($aFiles,"Массив $aFiles ~ Файл test.au3 ~~ Строка 33") FileCopy ($aFiles[$i], $sD, 1) Case "Move" FileMove ($aFiles[$i], $sD, 1) EndSwitch EndIf Next EndIf EndSwitch EndFunc Прикладываю архив с программой. Хотелось бы иметь работоспособную функцию перемещения-копирования-удаления файлов-папок по маске (все указанные или все кроме указанных). Да, с функцией удаления (построена по такому же принципу) тоже не все гладко - не удаляет файлы licence.txt, licence.rtf
|
|
| |
Andrey_A | Дата: Понедельник, 11.11.2019, 03:12 | Сообщение № 83 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, список создаётся правильный, но перенос строки присутствует, видимо косячит _FO_FileSearch или что-то ещё... не знаю, сам можешь увидеть скопировав свои пути из _ArrayDisplay
Либо править функцию поиска, либо в цикле убрать перенос:
Код For $i=1 To $aFiles[0] MsgBox(4096,"Переменная $aFiles[$i]","$aFiles[$i] =>"&$aFiles[$i]&"<=") $aFiles[$i]=StringReplace($aFiles[$i],@LF,'') MsgBox(4096,"Переменная $aFiles[$i]","$aFiles[$i] =>"&$aFiles[$i]&"<=") If FileExists ($aFiles[$i]) Then
Код d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer.exe [2]| d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer.ini [3]| d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer_Desktop.exe d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer_Resource_en.dll d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer_Resource_ru.dll d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer_Resource_uk.dll d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\TeamViewer_StaticRes.dll [8]| d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\tv_w32.dll [9]| d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\tv_w32.exe [10]| d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\tv_x64.dll [11]| d:\PTAppsUpd\PortableApps\TeamViewerPortable\App\teamviewer\tv_x64.exe
|
|
| |
asmadeus | Дата: Понедельник, 11.11.2019, 17:55 | Сообщение № 84 |
|
Andrey_A, как всегда я косячу с этими переносами. Спасибо, теперь все норм
|
|
| |
asmadeus | Дата: Четверг, 21.11.2019, 19:56 | Сообщение № 85 |
|
Привет. Такой абстрактный вопрос... Есть внешний файл (расширение abc), в нем прописаны команды.Структура напоминает ini (имеет секции).Команды выполняются построчно через execute В виде исходного кода поведение нормальное, а в скомпилированном виде - во внешний файл не передаются переменные. Все переменные глобальные. Можно натолкнуть на правильную стезю работы с такой моделью? Как заставить внешний файл видеть переменные? Выяснил, что косячит обфускатор. Как то лечится? или только отказ от него?
|
|
| |
asmadeus | Дата: Понедельник, 17.01.2022, 15:42 | Сообщение № 86 |
|
Привет! Требуется помощь в определении проблемы Почему команда копирования папки DirCopy копирует не папку, а ее содержимое? К примеру - функция:
Код #Include <FileOperations.au3> #include "_ViewValues.au3"
; Функция копирования/перемещения файлов и папок по маске Func _copmov ($iMod, $iOp, $sP, $sM, $iInc, $sD) If $sM = "Def" OR $sM="" Then $sM = "*" Switch $iOp Case '1' $aFolder = _FO_FolderSearch($sP, $sM, $iInc, 0, 1, 1) For $i=1 To $aFolder[0] $aFolder[$i]=StringStripWS($aFolder[$i], 3) Switch $iMod Case "Copy" DirCopy ($aFolder[$i], $sD, 1) Case "Move" DirMove ($aFolder[$i], $sD, 1) EndSwitch Next Case '2' $aFiles = _FO_FileSearch($sP, $sM, $iInc, 0, 1, 1) For $i=1 To $aFiles[0] $aFiles[$i]=StringStripWS($aFiles[$i], 3) Switch $iMod Case "Copy" FileCopy ($aFiles[$i], $sD, 1) Case "Move" FileMove ($aFiles[$i], $sD, 1) EndSwitch Next EndSwitch EndFunc
И вызов функции в нужном мне виде:
Код _copmov ("Copy", 1, "d:\Work\test_func_copy\source\Firefox", "Data", False, "d:\Work\test_func_copy\dest\Firefox")
То есть копирование всех папок, кроме включенных в маску (в данном случае - кроме папки Data) А происходит только копирование содержимого папок, а не самих папок с содержимым То есть вместо папки
копируются папки и файлы, вложенные в нее, такие как
Код AppInfo Bin Firefox Firefox64 readme.txt Куда копать?
|
|
| |
Andrey_A | Дата: Воскресенье, 23.01.2022, 16:23 | Сообщение № 87 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
|
asmadeus, может к каталогу назначения добавлять папку:
Код For $i=1 To $aFolder[0] $aFolder[$i]=StringStripWS($aFolder[$i], 3) $sFF=StringRegExpReplace($aFolder[$i],'(.*)(\\[^\\]*)','$2') Switch $iMod Case "Copy" DirCopy ($aFolder[$i], $sD&$sFF, 1)
.
|
|
| |
asmadeus | Дата: Понедельник, 24.01.2022, 08:35 | Сообщение № 88 |
|
Andrey_A, что интересно, если
Цитата $sM (маска поиска) пустая ("*" назначается в коде) $iInc (булевый тип) равен True ( ищем все по маске, а она пустая, то ест берем все) то при таких условиях забирает правильно
|
|
| |
Andrey_A | Дата: Понедельник, 04.07.2022, 11:46 | Сообщение № 89 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
|
Обновил UDF ViewValues.au3 http://tc-image.3dn.ru/forum/29-896-10469-16-1409500706
|
|
| |
|