Anzeige
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
[gelöst] Batch - Datei im Verzeichnis ausführen
- Ersteller o0Julia0o
- Erstellt am
Anzeige
areiland
Computer Legastheniker
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.
skorpion68
gehört zum Inventar
Der Befehl würde dann in etwa so lauten:o0Julia0o schrieb:Das Arbeitsverzeichnis, wie setzte ich das ebenfalls auf das Verzeichnis, wo ich die Start.exe aufrufe.
Code:
SET START=D:\V\Starter
%START%\Start.exe
Code:
SET START=D:\V\Starter\Start.exe
%START%
skorpion68
gehört zum Inventar
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:
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:
o0Julia0o
gehört zum Inventar
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.
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.
skorpion68
gehört zum Inventar
o0Julia0o
gehört zum Inventar
Hm jo.. dann hätte ich ja wieder einen absoluten Pfad mit:
Ich bräuchte eher so etwas:
Auf gleicher Verzeichnishöhe gibt es noch Starter2(Verzeichnisname). Das müsste als nächstes als Workdir gesetzt werden. Auch wieder realtiv.
Code:
SET WORKDIR=D:\Sicherung
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.
skorpion68
gehört zum Inventar
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
o0Julia0o
gehört zum Inventar
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:
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.
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
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.
$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
2. Ebene
$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.
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\
\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:
skorpion68
gehört zum Inventar
@o0Julia0o
Als Batch-Script wäre es dann so:
oder halt so, muss aber nicht:
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.
Als Batch-Script wäre es dann so:
Code:
%~dp0Starter\Start.exe
%~dp0Starter2\Start2.bat
%~dp0Starter3\Start3.bat
Code:
%~dp0\Starter\Start.exe
%~dp0\Starter2\Start2.bat
%~dp0\Starter3\Start3.bat
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
o0Julia0o
gehört zum Inventar
Danke. Warten ist nicht notwendig - die sollen alle 3 parallel ausgeführt werden. Also ob ich:
oder
ist egal. Es wird nichts ausgeführt. Wenn ich folgendes mache:
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.
Code:
%~dp0\Starter\Start.exe
%~dp0\Starter2\Start2.bat
%~dp0\Starter3\Start3.bat
Code:
%~dp0Starter\Start.exe
%~dp0Starter2\Start2.bat
%~dp0Starter3\Start3.bat
Code:
%~dp0\Starter\Start.exe
dir
pause
skorpion68
gehört zum Inventar
@o0Julia0o
Bin jetzt noch einmal dein Thema hier durchgegangen und habe dir folgendes Script Start.bat erstellt:
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:
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:
Zu guter Letzt wechselt der 4. CD-Befehl wieder ins Arbeitsverzeichnisses und zeigt mit dem Befehl DIR den Inhalt des Arbeitsverzeichnisses an, siehe Screenshot.
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
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
Code:
REG EXPORT HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat %WORKDIR%\QualityCompat.txt >NUL
Anhänge
Zuletzt bearbeitet:
skorpion68
gehört zum Inventar
@o0Julia0o
Habe noch etwas getestet und dir das folgende Script Start.bat neu erstellt:
Den Test kannst du im angefügten Screenshot nachvollziehen. Die einzelnen Befehle kannst du jetzt zumindest an deine Bedürfnisse anpassen.
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
Anhänge
G
Gelöschtes Mitglied 78250
Gast
Jungs, ihr fallt doch immer wieder drauf rein
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!
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