Jump to content

Batch - Datei zum Kopieren von Dateien nach Installation


Go to solution Solved by BOfH_666,

Recommended Posts

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 to post
  • Solution
Posted (edited)
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.  ;-) 

Edited by BOfH_666
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...