PDA

Показать полную графическую версию : Установщик обновлений, поиск файлов по двум маскам


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

Суть проблемы: написал я скрипт (сильно не ругайте т.к. я новичок в мире 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
#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
StringRight»
Даааааааа, оно... вот этого мне и не хватало! Поиск по последним трём символам, кайф.
Сделал только "по-своему" без массивов (ну не нравятся они мне), работает ништяк.

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

FlatX007
02-10-2010, 02:38
зря с массивами удобнее. я а тут придумывал пример :), знал бы отделался StringRight ...

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

Lubitel Softa
03-10-2010, 01:20
Уже второй день моск ломаю со своим "установщиком", помогите пожалуйста.

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

На выходе получаю вот такое сообщение от менеджера пакетов Вындавс.. шоб её:
http://savepic.ru/1793808m.png (http://savepic.ru/1793808.htm)

Через MsgBox пробил команду целиком:
PkgMgr.exe /ip /m:G:\1\x64\Windows6.1-KB969168-x64.cab /norestart

Самое интересное заключается в том, что если ту команду кинуть в "Пуск - Выполнить" то всё отлично работает а в скрипте никак.

Lubitel Softa
03-10-2010, 03:35
Проблема была в перенаправлении папок в х64 системе. Разобрался сам.




© OSzone.net 2001-2012