Batch-Skript funktioniert nicht?
Hallo, ich habe für mein Programm ein Installationsprogramm in Batch geschrieben (bzw. bin ich gerade dabei), da man damit einfach Dateien verschieben oder kopieren und Ordner erstellen kann. Dazu habe ich bis jetzt folgenden Code:
@ECHO OFF
TITLE Setup
CHCP 1252 > NUL
SET PFAD=%CD%
ECHO Setup - Version 1.0 ECHO (C) 2020
ECHO
ECHO.
ECHO Setup wird gestartet...
TIMEOUT /T 1 /NOBREAK > NUL
ECHO Dateien werden erstellt...
CD "C:\Program Files (x86)"
IF NOT EXIST ".\Beispiel" ( MD ".\Beispiel" )
IF EXIST ".\Beispiel\V_1.0" (
CLS
ECHO Scheinbar wurde das Programm schon installiert. Sie beenden das Setup mit einem beliebigen Tastendruck.
PAUSE > NUL
EXIT
) ELSE (
MD ".\Beispiel\V_1.0"
)
COPY %PFAD% ".\Beispiel\V_1.0"
PAUSE > NUL
Dabei sollen die Dateien von %PFAD% zu "C:\Program Files (x86)\Beispiel\V_1.0" kopiert werden. Stattdessen werden jedoch alle Dateien aus System32 dorthin kopiert... Warum ist das so?
3 Antworten
Da %PFAD% wahrscheinlich einfach immer das Verzeichnis sein soll, in dem die Batch-Datei liegt, kannst du stattdessen einfach %~dp0 verwenden.
Hierbei erstellst du mithilfe der Variable %0, in der immer der Pfad zur eigenen Datei enthalten ist, den Laufwerksbuchstaben und Pfad davon. Diese bleibt auch identisch, nachdem du das aktuelle Arbeitsverzeichnis per cd geändert hast.
Bei `cd` solltest du vielleicht auch die Option /D verwenden, um zusätzlich zum Pfad auch das Laufwerk wechseln zu können.
Zudem ist es sinnvoll auch die Existenz des "Program Files (x86)"-Ordners zu überprüfen.
SET PFAD=%CD% Weist den aktuellen Pfad zu. Startest du es von System32 aus?
Mit ECHO %PFAD% kannst du dir deinen aktuell zugewiesen Pfad anzeigen lassen.
CD "C:\Program Files (x86)" stattdessen geht auch CD %ProgramFiles(x86)%
IF NOT EXIST erübrigt sich durch IF EXIST und kann in ELSE mit rein,
sofern diese Überprüfung nicht für anderweitige Zwecke gedacht war.
IF EXIST ".\Beispiel\V_1.0" ( ECHO "EXIT"
) ELSE ( MD ".\Beispiel" ".\Beispiel\V_1.0" )
Gerne ;-)
... natürlich wäre es seltsam, wenn dir folgende Hilfsausgabe: ECHO COPY "%PFAD%" ".\Beispiel\V_1.0" so etwas wie COPY "C:\Mein Pfad\Installer" ".\Beispiel\V_1.0" ausgibt, aber COPY "C:\Windows\System32" ".\Beispiel\V_1.0" ausgeführt wird.
Genau das habe ich eben ausprobiert. Am Anfang des Skripts kommt der richtige Pfad raus, am Ende aber der falsche.
Warum auch immer die beiden Codefenster getrennt sind... Sie gehören jedenfalls zusammen. Die Zeilenumbrüche im ersten Fenster sind auch kaputt, naja, egal.
Nein, die Anwendung wird aus einem Ordner gestartet und den Test mit echo habe ich schon gemacht. Danke für die anderen Tipps. :)