Batch: Инсталиране на множество .msi файлове през Command Prompt

Може би Ви се е налагало някога да инсталирате няколко .MSI файла един след друг. Ако го правите рядко – супер. Ако е по-често става досадно 🙂 Тогава се питате “А не може ли да е малко по-автоматизирано т.е.аз ли работя за компютъра или той за мен?”. Може!

.MSI файловете са инсталационни пакети на програми, които се обработват и инсталират от процеса MSIEXEC. Съществуват два режима на работа:

  • GUI т.е. графичен режим – потребителят стартира .MSI файла и започва инсталацията на пакета;
  • чрез Command Prompt – стартира се програмата msiexec.exe, като й се подават различни параметри, както и пътя и името до .MSI пакета.
    • Често използвани параметри:
      • /i – интруктира msiexec да инсталира пакета, който следва след параметъра /i
      • /q – инструктира msiexec да извърши “тиха” инсталация, при която няма диалог с потребителя. Процесът протича с настройките по подразбиране, заложенив .msi пакета.

Спирам се на втория вариант. Инсталирането на един .MSI пакет се извършва в Command Prompt, по следния начин:

[code]msiexec.exe /i anyMsiPacket.msi /q[/code]

И тук започва голямото чудене – какво точно се случва? Маркерът мига, индикатора на харддиска не спира да свети, а програмата ми се инсталира чак след известно време? Причината за това е, че инсталацията става асинхронно. Заобикалката на това е доста лесна. Използва се програмата start.exe, която има параметър /wait. С тази промяна синхронното инсталиране на anyMsiPacket.msi ще изглежда така:

[code]start /wait msiexec.exe /i anyMsiPacket.msi /q[/code]

До тук добре. Но ако имаме 40 .msi пакета трябва пак да се занимаваме с досадно писане. Точно тук се сещаме колко ще ни е полезно ако можехме да вложим този единствен ред в цикъл и да обходим всички .msi пакети. Цикъл + Command Prompt=?
Да! Има цикъл от тип FOR в Command Prompt 🙂 И той притежава един много удобен за нас параметър /R. Синтаксисът е следния:

[code]for /R %i in (*.msi) do echo %i[/code]

където %i е променлива.

Разкодирано горното звучи така: “Обходи всички .msi файлове в текущата папка. За всяка итерация присвои името на съответния .msi файл на променливата %i и го изведи в конзолния екран”
Ако заместим “echo %i” с нашето “start /wait msiexec…” какво мислите, че ще се случи? Точно това, което ни трябва!

Окончателно нашето заклинание изглежда така:

[code]for /R %i in (*.msi) do start /wait msiexec.exe /i %i /q[/code]

Както виждате правя очевидното предположение, че всички желани от Вас .msi пакети са в една и съща папка 🙂

Важно! Ако приложите заклинанието директно в Command Prompt използвайте “%i”. Ако го приложите в .CMD файл, то трябва да запишете “%%i” – без кавичките, защото знакът % е служебен и се escape-ва чрез долепен до него % 🙂

Приятно batch-ване 🙂

3 thoughts on “Batch: Инсталиране на множество .msi файлове през Command Prompt

  1. Не го разбрах много много това мисля че не е за начинаещ като мен но се надявам малко по подробно да се обясни SILENT INSTALL

  2. Това, което демонстрирам в статията е именно Silent Install. Дали това може да стане зависи от програмата, която инсталираме т.е. дали тя поддържа “тиха инсталация”. При .MSI файловете е лесно – има параметър /q (Start->Run-> msiexec /? )
    Обикновено в документацията на производителя пише за поддържаните command-line параметри.
    Ако софтуерът не поддържа тиха инсталация може да се направи .MSI пакет за нея или програмка, която да “кликва” по бутоните на екрана 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *