dabbamonkeyyy 0 Geschrieben 24. April 2021 Melden Teilen Geschrieben 24. April 2021 Hallo alle Zusammen, ich habe ein Batch-Skript geschrieben, welches ermöglichen soll, ein Programm zu installieren und direkt danach eine Upgrade-Datei in den entsprechenden Pfad zu kopieren. Hier einmal der Code: @echo off :: BatchGotAdmin :------------------------------------- REM --> Check for permissions IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" ( >nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system" ) ELSE ( >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" ) REM --> If error flag set, we do not have admin. if '%errorlevel%' NEQ '0' ( echo Requesting administrative privileges... goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" set params= %* echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" exit /B :gotAdmin pushd "%CD%" CD /D "%~dp0" start /wait "Installation Programm" "F:\xxx\yyy.exe" if exist %C:\Program Files (x86)\xxx\yyy.EXE% ( xcopy "%cd%\Datei.exe" "C:\Program Files (x86)\xxx" /y /q ) Zu Erklärung des Codes: Der größte Teil ist ein Skript, den ich im Internet gefunden habe. Das dient dazu, dass der Nutzer (Admin) nur noch Bestätigen muss, wie bei einer normalen Installation. Die Line "start /wait (...)" startet die Installationsdatei. Die letzten Zeilen sollen die Upgrade-Datei nur noch kopieren, falls der Pfad schon existiert. Da dieser Anfangs noch nicht existiert, habe ich den Befehl "/wait" davor eingefügt, um die Installation abzuwarten, und danach erst die Datei in den korrekten Pfad reinzukopieren. Problem: Die Befehle funktionieren unabhängig voneinander super. Wenn das Programm installiert ist, kopiert er auch schon die Datei rüber. Das habe ich getestet, indem ich die originale Datei.exe gelöscht habe und die Upgrade-Datei (auch Datei.exe) durch den Befehl in den Programmpfad kopiert habe. Wenn ich aber beide Befehle in einem Skript (wie im obigen Code aufgeführt) ausführe, installiert er die Datei. Die Upgrade-Datei zieht er am Ende aber nicht mit rein. Weiß jemand, wo der Fehler liegt? Ihr müsst wissen, dass ich 0 Ahnung von Batch habe. Ich habe mir alles vom Internet zusammengesucht und der obige Code ist dabei entsanden.. PS.: Man hat mir öfters schon PowerShell empfohlen. Ich wollte jetzt nicht noch etwas neues anfangen, da die Lösung mir schon sehr nah am Ziel erscheint. Vielen dank im Voraus, euer dabbamonkeyy Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 24. April 2021 Beste Lösung Melden Teilen Geschrieben 24. April 2021 (bearbeitet) vor 2 Stunden schrieb dabbamonkeyyy: Ihr müsst wissen, dass ich 0 Ahnung von Batch habe. Deshalb glaube ich, dass es einfacher für Dich wäre, wenn Du gar nicht mehr mit Batch anfängst, sondern Dich gleich auf PowerShell stürzt. Die Syntax ist deutlich konsistenter und - wie ich finde - viel einfacher zu erlernen und man findet auch deutlich mehr Hilfe im Netz. vor 2 Stunden schrieb dabbamonkeyyy: Der größte Teil ist ein Skript, den ich im Internet gefunden habe. Du solltest keinen Code benutzen, den Du nicht verstehst. Der eigentlich relevante Code ist das hier: start /wait "Installation Programm" "F:\xxx\yyy.exe" if exist %C:\Program Files (x86)\xxx\yyy.EXE% ( xcopy "%cd%\Datei.exe" "C:\Program Files (x86)\xxx" /y /q ) In Batch werden Variablen in Prozentzeichen eingeschlossen. Der Pfad in Deiner if-Anweisung steht komplett in Prozentzeichen. Angenommen, dass das Skript im gleichen Ordner liegt, wie die Installationsdatei und die Updatedatei würde das Ganze in PowerShell ungefähr so aussehen: & "$PSScriptRoot\yyy.exe" if (Test-Path -Path 'C:\Program Files (x86)\xxx\yyy.EXE') { Copy-Item -Path "$PSScriptRoot\UpdateDatei.exe" -Destination 'C:\Program Files (x86)\xxx' } Ich glaube, selbst für jemanden ohne Kenntnisse, ist der Code ziemlich einfach zu lesen und zu verstehen. bearbeitet 24. April 2021 von BOfH_666 Zitieren Link zu diesem Kommentar
dabbamonkeyyy 0 Geschrieben 24. April 2021 Autor Melden Teilen Geschrieben 24. April 2021 Super, der Tipp hat mir geholen! Ich habe jetzt Anführungszeichen benutzt statt %. Danach ist mir ein weiterer Folgefehler aufgefallen, den ich dadurch bemerken konnte. Den habe ich auch behoben und siehe da, es funktioniert :) Danke! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.