Jump to content

Batch - Datei zum Kopieren von Dateien nach Installation


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

 

Link zu diesem Kommentar
  • Beste Lösung
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 von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...