Warum funktioniert der Windows START-Befehl nicht mit Leerzeichen in Argumenten UND Pfad?

7

Dieser Befehl funktioniert

%Vor%

Aber beides scheitert!

%Vor%

Der Fehler ist:

%Vor%

Offensichtlich hat es etwas damit zu tun, dass " die Argumente umgibt, aber warum und wie kann ich das umgehen?

Verwandte Fragen:

A. Nilsson 16.07.2013, 10:33
quelle

3 Antworten

14

Es ist ein bekannter Bug des START-Befehls.
Wenn Sie Leerzeichen in beiden, dem Befehl und den Parametern haben und versuchen, sie mit Anführungszeichen zu behandeln, schlägt es fehl.

Zuerst prüft der START-Befehl, ob der vollständige Befehl existiert.
Aber dann beginnt nur der erste Teil.

In Ihrem Fall sucht es nach "C:\tmp\test runner2.bat" , aber versuchen Sie C:\tmp\test zu starten.

Sie können es vermeiden, wenn der Befehl durch CALL

ersetzt wird %Vor%

Der START verwendet cmd /k , um den neuen Prozess zu starten.
Und das ist die Ursache für das Fehlverhalten.
Paul Groke erwähnte die Tatsache, dass dies nur passiert, wenn es sich um eine Batch-Datei handelt.
Exe -Dateien werden direkt ausgeführt und sind daher vom Fehler cmd.exe nicht betroffen.

In Ihrem Fall

%Vor%

Und die Hilfe von cmd /k und cmd /c erklärt, dass in diesem Fall das erste und letzte Zitat entfernt wird.

    
jeb 16.07.2013, 16:27
quelle
5

"Jeb" zeigte bereits in die richtige Richtung. In meinem Fall habe ich nicht versucht, einen Batch auszuführen, sondern ein Programm im Ordner "Programme" (Batch soll nach dem Start des Programms beendet werden). Beim Aufruf von

%Vor%

Der mit Anführungszeichen typisierte Pfad soll der Parameter "Title" mit dem START-Befehl sein. Um das zu beseitigen, müssen Sie einen Fenstertitel wie diesen "fälschen":

%Vor%

Das hat mir in meinem Fall geholfen.

    
Willy K. 15.10.2014 11:11
quelle
3

Dies beantwortet meine Frage nicht, aber es löst das unmittelbare Problem, das ich habe.

Beim Durchlesen der " Problem mit Anführungszeichen herum Dateinamen in der Windows-Befehlsshell "-post Ich habe einen Workaround gefunden:

%Vor%

Es gibt auch eine andere Lösung, indem Sie einfach den Befehl mit dem Befehl call ausführen (wie in Ansgar Wiechers )

%Vor%     
A. Nilsson 16.07.2013 11:35
quelle