Anzeige

Am Puls von Microsoft

Anzeige

[gelöst] Batch - Datei im Verzeichnis ausführen

o0Julia0o

gehört zum Inventar
hi,

wie führe ich relativ zur batch eine Datei aus? Die Start.bat ist hier:

D:\V\Start.bat

Es soll relativ die Datei ausgeführt werden:

D:\V\Starter\Start.exe

Code:
call \Starter\Start.exe
tut das nicht.
 
Anzeige
Du gibst einfach den genauen Pfad an! Oder, wenn der Batch im gleichen Ordner wie die zu startende Datei liegt, dann gibst Du "%~dp0" an, um die zu startende Datei im gleichen Ordner aufzufinden. Wenn sich diese in einem Unterordner des aktuellen Pfades befindet, dann eben "%~dp0\Starter\Start.exe" angeben, damit der Unterdner im gleichen Verzeichnis gesucht wird.
 
Wenn ich dich richtig verstehe dann möchtest du aus der batch heraus die *.exe starten, mit einer relativen Pfad Angabe?

ot:
Start Starter\Start.exe


Du musst nur den führenden Slash weg lassen.
 
Zuletzt bearbeitet:
oh ja. Jetzt verstehe ich. Es lag an etwas anderem. Das Arbeitsverzeichnis, wie setzte ich das ebenfalls auf das Verzeichnis, wo ich die Start.exe aufrufe.

Code:
set wd(Starter)

-> "wd(Starter)" ist nicht definiert, sagt der mir dann.
 
o0Julia0o schrieb:
Das Arbeitsverzeichnis, wie setzte ich das ebenfalls auf das Verzeichnis, wo ich die Start.exe aufrufe.
Der Befehl würde dann in etwa so lauten:
Code:
SET START=D:\V\Starter
%START%\Start.exe
oder gleich so:
Code:
SET START=D:\V\Starter\Start.exe
%START%
 
Erkläre bitte etwas genauer oder stelle mal dein Script hier zur Verfügung.

Nachtrag

OK, ich hatte dich wohl falsch verstanden. Das Arbeitsverzeichnis wäre dann in etwa so zu definieren:
Code:
SET WORKDIR=D:\Sicherung
 
Zuletzt bearbeitet:
Also. Die Start.bat befindet sich hier:
D:\V\Start.bat

Wie lege ich jetzt als Arbeitsverzeichnis folgendes Verzeichnis fest:
D:\V\Starter

Aber nicht als absolute Pfadangabe, sondern relativ. Das gesamte Script ruft dann 3 Dateien auf - auf die gleiche Art und Weise. Ich kann zwar die Dateien realtiv aufrufen - so:
Start Starter\Start.exe
Aber dann ist das Arbeitsverzeichnis immer noch:
D:\V
nämlich genau das Verzeichnis, wo sich die Start.bat befindet, welche ich zu Anfang aufrufe.
 
Hast du in Beitrag #7 meinen Nachtrag gelesen? Du hättest das Script mal in Code einfügen können, ich könnte es mir aber wie folgt vorstellen:
Code:
SET START=D:\V\Starter\Start.exe
SET WORKDIR=D:\Sicherung
%START% %WORKDIR%\...
 
Hm jo.. dann hätte ich ja wieder einen absoluten Pfad mit:
Code:
SET WORKDIR=D:\Sicherung
Ich bräuchte eher so etwas:
Code:
SET WORKDIR=Starter (und eben der Ordner, welcher sich in D:\V befindet)

Auf gleicher Verzeichnishöhe gibt es noch Starter2(Verzeichnisname). Das müsste als nächstes als Workdir gesetzt werden. Auch wieder realtiv.
 
Ich weis, dass es manchmal nicht so möglich ist etwas zu erklären. Das Script Start.bat soll im Ordner D:\V\Starter die Datei Start.exe aufrufen aber was soll diese den nun machen. Weiter schreibst du, dass noch zwei weitere Dateien aufgerufen werden sollen und wo befinden diese sich. Wenn das allgemeine Arbeitsverzeichnis D:\V ist dann müsstest du die 3 Dateien, ohne zu wissen was diese tun sollen, so aufrufen:
Code:
SET WORKDIR=D:\V
%WORKDIR%\Starter\Start.exe
%WORKDIR%\Starter2\Start1.exe
%WORKDIR%\Starter3\Start2.exe
 
danke, also die Start.bat womit alles gestartet wird befindet sich hier:
D:\V\Start.bat

Die drei Dateien, welche ausgeführt werden sollen, befinden sich hier:
D:\V\Starter\Start.exe
D:\V\Starter2\Start2.bat
D:\V\Starter3\Start3.bat

Wenn ich folgendes im Code habe:
Code:
SET WORKDIR=D:\V
dann habe ich ja einen absoluten Pfad angegeben. Das soll aber nicht so sein. Ich möchte also den Ordner "D:\V" überall, z.B. auch auf einen USB-Stick verschieben können & direkt dort ausführen können. Also ohne den Pfad oder Pfade in der Start.bat anzupassen.
 
Jetzt verstehe ich worauf du hinaus willst :)

Das geht mit der batch mit Sicherheit auch aber ich nutze lieber die PowerShell.

Im Endeffekt kannst du in einen Editor einfach folgenden Code eingeben und als start.ps1 Datei speichern.

Code:
$Erster_Pfad = $PSScriptRoot + "\Starter\Start.exe"
$Zweiter_Pfad = $PSScriptRoot + "\Starter2\Start.exe"
$Dritter_Pfad = $PSScriptRoot + "\Starter3\Start.exe"

& $Erster_Pfad 
& $Zweiter_Pfad
& $Dritter_Pfad

$PSScriptRoot ist eine System Variable und gibt dir den aktuellen Speicherort des Scripts zurück.

Durch eine Verkettung dieser Variable mit dem ersten 'relativen' Pfad kannst du das Script wiederum in unterschiedlichen 'UnterOrdnern' ausführen.Heißt wenn du das bei dir auf dem Rechner liegen hast und gleichzeitig auf einem USB Stick flexible sein willst kannst du das mit dieser Methode. Was allerdings immer erhalten bleiben muss um die Funktionalität zu gewährleisten ist die Ordner Struktur der zweiten Ebene die du dir ausgedacht hast. Die erste Eben ist völlig egal und kann abweichen.

1. Ebene
\V\​
2. Ebene
\Starter\​
\Starter2\​
\Starter3\​

$PSScriptRoot + "\Starter\Start.exe"

Oder anders gesagt der zweite Summant "\Starter2\Start.exe" muss immer stimmen

Du kannst die start.ps1 dann aus einer batch öffnen oder in der Ordner Ansicht, rechte Maustaste, Öffnen mit, Powershell. Sollte PowerShell nicht angezeigt werden musst du die exe unter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe in die Auswahl der zu öffnenden Programme aufnehmen.
 
Zuletzt bearbeitet:
@o0Julia0o
Als Batch-Script wäre es dann so:
Code:
%~dp0Starter\Start.exe
%~dp0Starter2\Start2.bat
%~dp0Starter3\Start3.bat
oder halt so, muss aber nicht:
Code:
%~dp0\Starter\Start.exe
%~dp0\Starter2\Start2.bat
%~dp0\Starter3\Start3.bat
Die Variable %~dp0 steht für den Verzeichnispfad z. Bsp. D:\V. Dies hatte dir aber bereits @areiland in Beitrag #2 erklärt, aber dann hattest du Beitrag #4 geschrieben.

Sollten deine 3 Dateien verzögert ausgeführt werden dann musst du vor jeden Befehl noch START /WAIT einfügen, siehe dazu die angefügte Hilfedatei start.txt.
 

Anhänge

  • start.txt
    6,4 KB · Aufrufe: 330
Danke. Warten ist nicht notwendig - die sollen alle 3 parallel ausgeführt werden. Also ob ich:
Code:
%~dp0\Starter\Start.exe
%~dp0\Starter2\Start2.bat
%~dp0\Starter3\Start3.bat
oder
Code:
%~dp0Starter\Start.exe
%~dp0Starter2\Start2.bat
%~dp0Starter3\Start3.bat
ist egal. Es wird nichts ausgeführt. Wenn ich folgendes mache:
Code:
%~dp0\Starter\Start.exe
dir
pause
dann sehe ich das Verzeichnis von D:\V, also dass, wo sich die Start.bat befindet mit dem Code. Somit wurde auch nicht das Arbeitsverzeichnis umgesetzt auf D:\V\Starter. Die D:\V\Start.exe wird auch nicht ausgeführt.
 
@o0Julia0o,

versuchs mal mit folgendem Code in Deiner Datei start.bat:

Code:
start .\Starter\Start.exe
start .\Starter2\Start2.bat
start .\Starter3\Start3.bat

Das bezieht sich auf die Angaben in Post #12
 
Code:
start %~dp0\Starter\Start.exe
start %~dp0\Starter2\Starter.bat
start %~dp0\Starter3\Starter.bat

Hab die Antwort von PeteM92 gar nicht gesehen :D
 
@o0Julia0o
Bin jetzt noch einmal dein Thema hier durchgegangen und habe dir folgendes Script Start.bat erstellt:
Code:
@ECHO OFF
TITLE %~nx0
COLOR 1F
ECHO Laufwerksbuchstaben mit Doppelpunkt angeben:
SET /p DRIVE=Laufwerksbuchstabe: 
:: Arbeitsverzeichnis
SET WORKDIR=%DRIVE%\V
CD %WORKDIR%\Starter & Start.exe
CD /D %WORKDIR%\Starter2 & CALL Start2.bat
CD /D %WORKDIR%\Starter3 & CALL Start3.bat
CD.. & DIR
PAUSE
Nachdem man das Script Start.bat gestartet hat muss man zuerst einen Laufwerksbuchstabe mit Doppelpunkt (z. Bsp. E:) angeben und gleich danach wird das Arbeitsverzeichnis (WORKDIR) festgelegt.

Mit dem 1. CD-Befehl wird ins Unterverzeichnis Starter des Arbeitsverzeichnisses gewechselt und das Programm Start.exe wird ausgeführt. Anstatt Start.exe habe ich dotnet.exe %WORKDIR%\ASoftReport.txt verwendet, siehe hier ASoft .NET Version Detector product details. Der ASoft .NET Version Detector erstellt so das LOG ASoftReport.txt und zusätzlich die Datei ASoftReport.xml im Arbeitsverzeichnis.

Im Anschluss wechselt 2. CD-Befehl ins Unterverzeichnis Starter2 des Arbeitsverzeichnisses und das Script Start2.bat wird ausgeführt. Das Script Start2.bat liest bei mir einen Registry-Schlüssel aus und speichert das LOG Monitor.txt im Arbeitsverzeichnis. Inhalt der Start2.bat war folgender:
Code:
REG EXPORT HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318} %WORKDIR%\Monitor.txt >NUL
Der 3. CD-Befehl wechselt ins Unterverzeichnis Starter3 des Arbeitsverzeichnisses und das Script Start3.bat wird ausgeführt. Hier lies ich einen weiteren Registry-Schlüssel auslesen und das LOG QualityCompat.txt dazu im Arbeitsverzeichnis speichern. Inhalt der Start3.bat war folgender:
Code:
REG EXPORT HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat %WORKDIR%\QualityCompat.txt >NUL
Zu guter Letzt wechselt der 4. CD-Befehl wieder ins Arbeitsverzeichnisses und zeigt mit dem Befehl DIR den Inhalt des Arbeitsverzeichnisses an, siehe Screenshot.
 

Anhänge

  • Start.jpg
    Start.jpg
    80,5 KB · Aufrufe: 358
Zuletzt bearbeitet:
@o0Julia0o
Habe noch etwas getestet und dir das folgende Script Start.bat neu erstellt:
Code:
@ECHO OFF
TITLE %~NX0
COLOR 1F
SET WORKDIR=%~DP0
ECHO.
DIR /S %WORKDIR%
ECHO.
PAUSE
SET SUBDIR1=%WORKDIR%\Starter1
%SUBDIR1%\Start.exe
ECHO.
DIR %SUBDIR1%
ECHO.
PAUSE
ECHO.
SET SUBDIR2=%WORKDIR%\Starter2
CALL %SUBDIR2%\Start2.bat
DIR %SUBDIR2%
ECHO.
PAUSE
ECHO.
SET SUBDIR3=%WORKDIR%\Starter3
CALL %SUBDIR3%\Start3.bat
DIR %SUBDIR3%
ECHO.
PAUSE
Den Test kannst du im angefügten Screenshot nachvollziehen. Die einzelnen Befehle kannst du jetzt zumindest an deine Bedürfnisse anpassen.
 

Anhänge

  • Start1.jpg
    Start1.jpg
    244,1 KB · Aufrufe: 405
Jungs, ihr fallt doch immer wieder drauf rein :p

Batch, toll, aber was soll eigentlich überhaupt erledigt werden? Gehts immer noch um Sync oder Backup? (ich vermute jedenfalls so aufgrund der Beschreibung)

Eine komplette Projektbeschreibung wäre praktisch, zumal ja die Benutzerin bekannt ist, dass es doch öfters am richtigen Verständnis hapert und spätestens bei der Umsetzung scheitert.

Wäre es nur ein Befehl gewesen, wäre eine Verknüpfung die beste Wahl gewesen, weil in jener auch ein Arbeitsverzeichnis festgelegt werden kann. Auch bei Batch!
 
Anzeige
Oben