Batch exe mit Leerzeichen im Pfad per Batch starten

o0Julia0o

Commander
Registriert
Dez. 2012
Beiträge
2.767
hi, ich probiere das so:

Code:
set Starter="test.exe"
start %~dp0\%Starter%

Wemm die exe-Datei in einem Pfad ohne Leerstelle liegt, klappt das. Anders nicht.
D:\Test\test.exe -> klappt
D:\Tes t\test.exe -> klappt nicht
"start %~dp0\%Starter%" klappt auch nicht

Wie bekomme ich das jetzt hin?
 
Entweder du liest den Pfad in eine Variable ein und fragst diese ab, oder du setzt statt dem leerzeichen einfach "%20" ein. Oder du Setzt in ganzen Pfad in Anführungszeichen.
 
  • Gefällt mir
Reaktionen: o0Julia0o und BFF
Dankeschön Zensai! Das mit dem Leerzeichen geht nicht, da der Pfad variabel ist. Den gesamten Pfad in Anführungszeichen geht, wie gesagt nicht(3. Beispiel im Startpost).

Und diese beiden Varianten mit der Variableneinlesung funktionieren ebenfalls nicht:
Code:
set Starter="test.exe"
set Pfad1=%~dp0
start %Pfad1%\%Starter%

Code:
set Starter="test.exe"
set Pfad1="%~dp0"
start %Pfad1%\%Starter%
 
o0Julia0o schrieb:
Den gesamten Pfad in Anführungszeichen geht, wie gesagt nicht(3. Beispiel im Startpost).
o0Julia0o schrieb:
"start %~dp0\%Starter%" klappt auch nicht

Du sollst auch nur den Pfad in Anführungszeichen setzen, nicht das start-Kommando ebenfalls.
 
  • Gefällt mir
Reaktionen: o0Julia0o
Raijin schrieb:
Du sollst auch nur den Pfad in Anführungszeichen setzen, nicht das start-Kommando ebenfalls.
Hatte ich falsch geschrieben. So hatte ich es probiert. Das klappt nicht:
set Starter="test.exe"
start "%~dp0\%Starter%"

genausowenig wie:
set Starter="test.exe"
start "%~dp0"\%Starter%

oder wie:
set Starter="test.exe"
start %~dp0\"%Starter%"

ooder wie:
set Starter="test.exe"
start "%~dp0"\"%Starter%"

Cardhu schrieb:
Lass den Start-Befehl weg
Das geht nicht, da ich den parallen Start benötige.
 
Wenn du den START-Befehl und Anführungsstriche nutzt, dann geht der START-Befehl davon aus, dass du mit dem Text innerhalb den (ersten) Anführungsstrichen einen Titel setzen möchtest. Das sieht man auch in der Hilfe:
Code:
START ["Titel"] [/D Pfad] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME] | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA-Knoten>] [/AFFINITY <Hex.-Affinitätsmaske>] [/WAIT] [/B]
      [Befehl/Programm]
      [Parameter]

Du musst also folgende Syntax nutzen:

start "" "%~dp0\%Starter%"
 
  • Gefällt mir
Reaktionen: o0Julia0o, Raijin und Cardhu
Das funktioniert nun. Danke!

Einen Pfad samt Exe mit Leerzeichen direkt kann man nicht starten per Start, wenn man sich nicht in dem gleichen Verzeichnis befindet wie die Exe? Da müsste man den Umweg über Speicherung des aktuellen Pfades gehen und dann in das Verzeichnis gehen und die Exe von dort aus starten, richtig?

start D:\Test\Test.exe -> funktioniert, wenn man die Batch aus C:\ ausführt
start D:\Tes T\Test.exe -> funktioniert nicht, wenn man die Batch aus C:\ ausführt
start "D:\Tes T\Test.exe" -> funktioniert nicht, wenn man die Batch aus C:\ ausführt
start "D:\Test\Test.exe" -> funktioniert aber auch nicht, wenn man die Batch aus C:\ ausführt
 
Good catch @Darkman.X


o0Julia0o schrieb:
Das klappt nicht:
set Starter="test.exe"
start "%~dp0\%Starter%"

genausowenig wie:
set Starter="test.exe"
start "%~dp0"\%Starter%

oder wie:
set Starter="test.exe"
start %~dp0\"%Starter%"

ooder wie:
set Starter="test.exe"
start "%~dp0"\"%Starter%"
@o0Julia0o , das ist ja nicht dein erster Thread zum Thema Batch. Ich gebe dir jetzt einen ultimativen Tip, den ich dir schon mindestens einmal gegeben habe: Debug Echos.
Du probierst jetzt gerade komplett planlos alle möglichen Kombinationen und Schreibweisen aus, mal mit " hier, mal mit " da und am besten auch immer noch zur Sicherheit noch ein \ dazu. Wenn du auch nur einmal ein Echo vor deiner start-Zeile gesetzt hättest, würdest du sofort sehen, dass da einfach kein gültiger Pfad rauskommt.

Aus obigen Varianten kommt folgender Output, wenn man echo start .... macht:

start "C:\Users\Raijin\\"test.exe""
start "C:\Users\Raijin\"\"test.exe"
start C:\Users\Raijin\\""test.exe""
start "C:\Users\Raijin\"\""test.exe""

Preisfrage: Warum funktioniert wohl keine dieser Varianten (abgesehen von @Darkman.X 's Einwand bezüglich des Titels)?

Bei Variante 1 hast du die Variable Starter bereits mit "" umschlossen, die tauchen natürlich ebenfalls im zusammengesetzten Pfad auf und gehören da aber nicht hin, weil " kein zulässiges Zeichen IN einem Pfad ist.
Bei Variante 2 gilt dasselbe, aber hier hast du zusätzlich noch die dp0-Variable mit "" umschlossen, also doppelt falsch
Bei Variante 3 und 4 hast du noch mehr ""

Hinzu kommt, dass %~dp0 bereits ein abschließendes \ enthält und du ein zweites dahinterbastelst. Das funktioniert zwar, ist aber bestenfalls als unschön zu betrachten und im Zweifelsfalle wird es sogar ebenfalls als fehlerhafter Pfad interpretiert, wenn man so einen Pfad beispielsweise an die test.exe übergeben würde und diese die // nicht mag.


Korrekt wäre daher:

Code:
set Starter=test.exe
start "EinTitelOderKeiner" "%~dp0%Starter%"

Wie auch schon in anderen Threads rate ich dir abermals, dich lieber mit PowerShell zu beschäftigen. Batch is a bitch...
 
Zuletzt bearbeitet: (Angemerkter Fehler wurde korrigiert!)
  • Gefällt mir
Reaktionen: Fusionator, M-X, o0Julia0o und 3 andere
@Raijin Leider ist jetzt in deiner letzten Code-Zeile das abschließende Leerzeichen verloren gegangen. Sollte aber beim Testen sowieso schnell auffallen.
Code:
set Starter=test.exe
start "EinTitelOderKeiner" "%~dp0%Starter%"
 
  • Gefällt mir
Reaktionen: Raijin
@Raijin
Stimmt, das mit dem zusätzlichen Backslash hatte ich total übersehen/vergessen. Ich hatte damit mal experimentiert und CMD stört sich im Allgemeinen wohl nicht an einem Doppel-Backslash. Aber wenn es ordentlich sein soll (und für unbekannte Ausnahmen), dann sollte man wirklich "%~dp0%Starter%" nutzen. 👍


@o0Julia0o
Test es mal so, wie es @Raijin geschrieben hatte. Bitte das abschließende "-Zeichen mit einfügen, Raijin hatte es versehentlich vergessen. (EDIT 12:40 Uhr: wurde von ihm korrigiert)
Und dabei auch meine erwähnte Syntax nutzen, denn in deinen neuesten Tests hattest du es nicht gemacht, es fehlen die "" für den Titel. Wenn du es mit "" getestet hattest, dann schreibe das auch so, sonst wird eine Fernanalyse sehr schwierig/unmöglich!

Wenn es keine Besserung bringt:
Ich selber hatte, glaube ich, auch mal die gleiche Erfahrung gemacht wie du, dass einzelne Programme Probleme machten. Du hast nun folgende Möglichkeiten:
  • Du führst vor dem START-Befehl einen Verzeichniswechsel durch, z.B. mit CD /D "%~dp0" oder PUSHD "%~dp0"
  • Wie man in der START-Hilfe sehen kann (nutzt du die Hilfe überhaupt?), kann man auch einen Pfad angeben. In deinem Fall wäre die Syntax dann START "" /D "%~dp0" "%Starter%".
    (Den Code habe ich jetzt ungetestet geschrieben, ich weiß nicht ob der Pfad-Parameter /D sich am abschließenden \ in "%~dp0" stört oder nicht? Oder ob ein abschließender \ sogar Pflicht ist?)

Wenn man es aber genau nimmt (es fällt mir erst jetzt beim Schreiben auf), dann ergibt dein Text keinen echten Sinn oder du verheimlichst uns vorhergehenden Batch-Code. "%~dp0" enthält den Pfad der Batch-Datei. Die Variable kann natürlich nicht funktionieren, wenn du die Batch von C: ausführst, das Programm aber z.B. auf D: liegt. Mir scheint, dass du den Sinn von "%~dp0" gar nicht verstanden hast? Oder nutzt du die Variable gar nicht und fehlt deshalb auch in deinen neuesten Tests?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o und Raijin
simpsonsfan schrieb:
Leider ist jetzt in deiner letzten Code-Zeile das abschließende Leerzeichen verloren gegangen
Mist, da hast du vollkommen Recht. Der Vollständigkeit halber und um Folgefehler von Mitlesern zu vermeiden, habe ich das korrigiert. Vielen Dank für den wachsamen Blick!!


Darkman.X schrieb:
"%~dp0" enthält den Pfad der Batch-Datei. Die Variable kann natürlich nicht funktionieren, wenn du die Batch von C: ausführst, das Programm aber z.B. auf D: liegt.
In der Tat, aus dem Blickwinkel hatte ich das noch gar nicht betrachtet. Ich denke auch, dass hier ein Missverständnis vorliegt, ein klassischer Fall von XY-Problem. Wir haben jetzt nur die eine Zeile syntaktisch korrigiert, aber im Nachhinein wird klar, dass dp0 für den eigentlichen Anwendungsfall gar nicht geeignet scheint.


Ich danke euch beiden. Immer gut, wenn andere nochmal querlesen. War um die Zeit etwas müde (sehr spät im Bett :()
 
  • Gefällt mir
Reaktionen: o0Julia0o
Darkman.X schrieb:
Wenn man es aber genau nimmt (es fällt mir erst jetzt beim Schreiben auf), dann ergibt dein Text keinen echten Sinn oder du verheimlichst uns vorhergehenden Batch-Code. "%~dp0" enthält den Pfad der Batch-Datei. Die Variable kann natürlich nicht funktionieren, wenn du die Batch von C: ausführst, das Programm aber z.B. auf D: liegt. Mir scheint, dass du den Sinn von "%~dp0" gar nicht verstanden hast? Oder nutzt du die Variable gar nicht und fehlt deshalb auch in deinen neuesten Tests?
Doch es funktioniert doch. Wie meinst du das mit con C:\ ausführen? Eine Verknüpfung von C:\ ausführen? Das funktioniert.
 
Na, du hattest doch geschrieben:
o0Julia0o schrieb:
start D:\Test\Test.exe -> funktioniert, wenn man die Batch aus C:\ ausführt
start D:\Tes T\Test.exe -> funktioniert nicht, wenn man die Batch aus C:\ ausführt
start "D:\Tes T\Test.exe" -> funktioniert nicht, wenn man die Batch aus C:\ ausführt
start "D:\Test\Test.exe" -> funktioniert aber auch nicht, wenn man die Batch aus C:\ ausführt

Der größte Teil des Threads dreht sich um "%~dp0". Wenn du schreibst "wenn man die Batch aus C:\ ausführt", dann gehe ich davon aus, dass du meinst: Die Batch-Datei liegt auf C:. Und dann beinhaltet die Variable "%~dp0" halt C:\usw.usw. (den Laufwerksbuchstaben + Pfad, wo die Batch-Datei liegt) und macht zum Starten eines Programms auf D: keinen Sinn, so wie du es in deinem Start-Post vor hattest.
 
  • Gefällt mir
Reaktionen: o0Julia0o
Mach es mal so:

set "Starter=test.exe"
echo Starte: "%~dp0\%Starter%"
start /wait "%~dp0\%Starter%"

Dann darf in %Starter% aber auch im %~dp0 ein Leerzeichen sein.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o
Danke Dir kleiner_muck. Selbst ohne Leerzeichen im Pfad (oder exe) funktioinert das nicht:
Starte: "E:\Test\\test.exe"
^CBatchvorgang abbrechen (J/N)?
 
Das heißt, du hast immer noch Probleme?

Nun.....dann zeige uns deine komplette Batch, schreibe uns wo die Batch ganz genau liegt (kompletten Pfad angeben), wo das Programm genau liegt, welches Programm es ist (damit man es evtl. selber testen kann) und was genau nicht funktioniert.

Denn dein Problem aus dem Startpost hatten "Raijin" und ich schon behoben. Die Befehle/Syntax, die ich geschrieben hatte, funktionieren definitiv, hatte ich selber schon häufig genug angewendet. Wenn es aber bei dir immer noch nicht funktioniert, dann hast du vermutlich einen Gedankenfehler, welchen wir ohne weitere Informationen nicht korrigieren können.
 
  • Gefällt mir
Reaktionen: BAGZZlash, o0Julia0o und Raijin
Und nochmal: Mach echos vor die kritischen Zeilen, um zu debuggen was dort tatsächlich ausgeführt wird. Batch ist eben echt eine bitch und lässt sich nicht anders debuggen.

Bis hierhin hatte ich auch angenommen, dass es jetzt funktioniert, weil du plötzlich aus dem Thread raus warst. Also was ist nun der konkrete status quo?
 
  • Gefällt mir
Reaktionen: BAGZZlash und o0Julia0o
Diesmal habe ich es ausprobiert, so sollte es gehen. "%~dp0" wird schon mit einem "\" abgeschlossen, und 2 hintereinander kann man nicht gebrauchen.

set "Starter=Notepad.exe"
start "" /wait "C:\Windows\%Starter%"

Für deinen Fall
set "Starter=test.exe"
echo Starte: "%~dp0%Starter%"
start "" /wait "%~dp0%Starter%"
 
  • Gefällt mir
Reaktionen: o0Julia0o
@kleiner_muck : Dein Enthusiasmus in allen Ehren, aber das ist bereits alles in diesem Thread angesprochen worden.

Es muss von @o0Julia0o einfach nur umgesetzt werden und im Falle von nach wie vor vorhandenen Fehlern oder unerwünschter Funktionsweise entsprechendes Feedback gegeben werden. Wir können schließlich keine Probleme lösen, von denen wir gar nichts wissen.
 
  • Gefällt mir
Reaktionen: o0Julia0o
Zurück
Oben