Ich schreibe eine Skriptvorlage, um mehrere MSIs zu installieren, einschließlich Fehlerprotokollierung und einer Rollback-Funktion. Es enthält Skriptblöcke zum Speichern von Installations- und Deinstallationsinformationen für jede MSI.Wie setze ich den Wert mehrerer Variablen in einem Makro im Batch?
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: Global Variables
SET PACKAGENAME=SysinternalsSuite
SET THISDIR=%~dp0
SET LOGFOLDER=%TEMP%\%PACKAGENAME%
IF EXIST "%LOGFOLDER%" RD "%LOGFOLDER%" /S /Q
MKDIR "%LOGFOLDER%"
SET LOGLEVEL=/lv
:: Scriptblock
SET /A INDEX=0
SET DISPLAYNAME[%I%]=SysinternalsSuite.msi
SET MSIPATH[%I%]="%thisdir%SysinternalsSuite.msi"
SET GUID[%I%]={79D7C0BA-9E50-44E8-8D0B-56D5EA692B5E}
SET ACTIONLOG[%I%]="%LOGFOLDER%\%I%_!DISPLAYNAME[%I%]!.log"
SET INSTALLCOMMAND[%I%]=MsiExec.exe /i !MSIPATH[%I%]! /qn %LOGLEVEL% !ACTIONLOG[%I%]!
SET UNINSTALLCOMMAND[%I%]=MsiExec.exe /x !GUID[%I%]! /qn
SET EXITATERROR[%I%]=1
SET ALLOWEDERROR[%I%]=3010
ECHO !INSTALLCOMMAND[%I%]!
ECHO !UNINSTALLCOMMAND[%I%]!
Die Idee ist, dass nur die DisplayName-, MSIPath und GUID definiert werden müssen, und die letzten 5 Zeilen des Blocks Teil einer Vorlage sein. Gibt es eine Möglichkeit, einen Marco für die letzten 5 Zeilen des Skriptblocks zu verwenden? Ich habe mit DOSKEY versucht, aber das scheint nicht im Stapel zu funktionieren, und mit all den Prozentzeichen und Ausrufezeichen wird es schwierig. Irgendwelche Vorschläge werden geschätzt!
EDIT: Hinzugefügt einige Variablen und ECHO-Befehle, um zu veranschaulichen, was die Ausgabe sein sollte; Gültige MsiExec-Befehlszeilen.
Wenn die die letzten fünf Variablen sind gleich, warum sie mit einem Index erstellen? Der Umgebungsvariablenraum ist begrenzt. – lit
Der Wert ist nicht derselbe, aber die Befehle install Befehl und deinstallieren haben die gleiche Definition in Bezug auf andere Variablen. Mit anderen Worten: Die Zeilen sind gleich, aber die Werte sollten für jeden MSI-Block unterschiedlich sein. – jnoort