Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Установщик обновлений, поиск файлов по двум маскам (http://forum.oszone.net/showthread.php?t=187124)

Lubitel Softa 02-10-2010 01:03 1509355

Установщик обновлений, поиск файлов по двум маскам
 
Здравствуйте. Друзья, помогите решить проблему с поиском файлов по нескольким маскам.

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

FlatX007 02-10-2010 01:58 1509389

Код:

#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


Lubitel Softa 02-10-2010 02:21 1509392

Цитата:

Цитата FlatX007
StringRight»

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

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

FlatX007 02-10-2010 02:38 1509395

зря с массивами удобнее. я а тут придумывал пример :), знал бы отделался StringRight ...

madmasles 02-10-2010 10:03 1509485

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

Lubitel Softa 03-10-2010 01:20 1510006

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

Допустим имеем простейшую команду запуска:
Код:

$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
Самое интересное заключается в том, что если ту команду кинуть в "Пуск - Выполнить" то всё отлично работает а в скрипте никак.

Lubitel Softa 03-10-2010 03:35 1510042

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


Время: 19:36.

Время: 19:36.
© OSzone.net 2001-