Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Установщик обновлений, поиск файлов по двум маскам

Ответить
Настройки темы
Установщик обновлений, поиск файлов по двум маскам

Аватара для Lubitel Softa

Старожил


Сообщения: 348
Благодарности: 100

Профиль | Отправить PM | Цитировать


Изменения
Автор: Lubitel Softa
Дата: 05-10-2010
Здравствуйте. Друзья, помогите решить проблему с поиском файлов по нескольким маскам.

Суть проблемы: написал я скрипт (сильно не ругайте т.к. я новичок в мире AutoIT), который устанавливает обновления в формате msu для Вындавс 7. И всё бы ничего, да только захотелось мне сделать его "универсальным" т.е. добавить возможность установки обновлений из *.cab архивов. И тут возник вопрос, а как сделать поиск по двум маскам
FileFindFirstFile может искать только по одной, так по крайней мере написано в справке.... и тут работа стала.

Как я себе представлял установку обновлений в виде *.cab:

Код: Выделить весь код
While $search_msu = 1
    $msu = FileFindNextFile ($search_msu)
    If @error Then ExitLoop

    $iPrecent += 5
    $counter += 1
    ProgressSet ($iPrecent, $counter & "/" & $iFiles & " - " & $msu)

    Select
        Case $msu = "*.cab"
            RunWait (@SystemDir & "\PkgMgr.exe /ip /m:" & $msu & " /quiet /norestart")

        Case $msu = "*.msu"
            RunWait (@SystemDir & "\wusa.exe " & $msu & " /quiet /norestart")
    EndSelect

    If $iPrecent = 100 Then
        $iPrecent = 0
    EndIf
WEnd
Но такой вариант не прокатил потому что, как оказалось, $msu возвращает полное имя файла (Windows6.1-KB969168-x86.msu) и по расширению никак не получится сделать If - Then - Else.

Отправлено: 01:03, 02-10-2010

 

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <File.au3>
#include <Array.au3>

Global Const $CAB = "cab"
Global Const $MSU = "msu"
Global $aFile[1]

$FileList = _FileListToArray(@ScriptDir)
If (Not IsArray($FileList)) And (@Error = 1) Then Exit

For $i = 1 To $FileList[0]
    Switch StringRight($FileList[$i], 3)
        Case $CAB
            _ArrayAdd($aFile, StringRegExpReplace($FileList[$i], "^.*\\", ""))
        Case $MSU
            _ArrayAdd($aFile, StringRegExpReplace($FileList[$i], "^.*\\", ""))
    EndSwitch
Next

If UBound($aFile, 1) = 1 Then
    MsgBox(0, Default, "Нет файлов!")
    Exit
Else
    _ArrayDisplay($aFile,"$FileList")
EndIf
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:58, 02-10-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Lubitel Softa

Старожил


Сообщения: 348
Благодарности: 100

Профиль | Отправить PM | Цитировать


Цитата FlatX007:
StringRight»
Даааааааа, оно... вот этого мне и не хватало! Поиск по последним трём символам, кайф.
Сделал только "по-своему" без массивов (ну не нравятся они мне), работает ништяк.

СПАСИБО ВАМ ОГРОМНОЕ!

Отправлено: 02:21, 02-10-2010 | #3


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


зря с массивами удобнее. я а тут придумывал пример , знал бы отделался StringRight ...
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:38, 02-10-2010 | #4


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


FlatX007,
По-моему, в Вашем коде ...StringRegExpReplace($FileList[$i], "^.*\\", "")... - лишнее. _FileListToArray() возвращает массив имен файлов, без пути.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:03, 02-10-2010 | #5


Аватара для Lubitel Softa

Старожил


Сообщения: 348
Благодарности: 100

Профиль | Отправить PM | Цитировать


Уже второй день моск ломаю со своим "установщиком", помогите пожалуйста.

Допустим имеем простейшую команду запуска:
Код: Выделить весь код
$Command = ('PkgMgr.exe' & ' /ip /m:' & @ScriptDir & '\x64\Windows6.1-KB969168-x64.cab' & ' /norestart')
RunWait ($Command)
MsgBox (64, "проверка значения", $Command)
На выходе получаю вот такое сообщение от менеджера пакетов Вындавс.. шоб её:


Через MsgBox пробил команду целиком:
Код: Выделить весь код
PkgMgr.exe /ip /m:G:\1\x64\Windows6.1-KB969168-x64.cab /norestart
Самое интересное заключается в том, что если ту команду кинуть в "Пуск - Выполнить" то всё отлично работает а в скрипте никак.

Отправлено: 01:20, 03-10-2010 | #6


Аватара для Lubitel Softa

Старожил


Сообщения: 348
Благодарности: 100

Профиль | Отправить PM | Цитировать


Проблема была в перенаправлении папок в х64 системе. Разобрался сам.

Отправлено: 03:35, 03-10-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Установщик обновлений, поиск файлов по двум маскам

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[статья] Поиск и загрузка обновлений Vadikan Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 18 05-03-2014 11:52
Разное - Поиск критических обновлений для португальской XP Home alfonso Наборы обновлений для Windows XP/2003/Windows 7 6 19-03-2008 15:51
[решено] Поиск обновлений - загрузка процессора 100% Ser6720 Microsoft Windows 2000/XP 14 08-06-2007 19:02
Программа для создания обновлений файлов XCodeR Программное обеспечение Windows 12 26-06-2006 13:29
Поиск файлов по тексту. Belansky Общий по Linux 12 04-06-2003 06:17




 
Переход