Was ist der Unterschied zwischen den folgenden cmd-Skripten?

10

Ich habe versucht, mehrere Programme über eine Batch-Datei zu starten, und bin auf Probleme gestoßen, aber das war in der Vergangenheit.

Ich bin relativ neu in Skripten und Befehlszeilen und dies wäre meine Frage: Was ist der Unterschied zwischen den folgenden cmd-Skripten?

Dieser wird akzeptiert

Start Chrome

(Ich vermute hier, dass einige installierte Programme anhand des Titels erkannt werden, obwohl das Verzeichnis nicht dort ist, wo die chrome.exe das Programm noch startet, spielen Registrierungsschlüssel eine Rolle dabei?)

Dieser funktioniert auch

cd "FOO_DIR"
start FOO.exe

diese jedoch nicht

start "FOO_DIR\FOO.exe"

(öffnet ein neues Fenster, ohne FOO.exe zu starten)

start /B "FOO_DIR\FOO.exe"

(schreibt den Copyright-Text erneut und tut nichts anderes)

(Betriebssystem Windows 7 x64)

Herr smith
quelle

Antworten:

17
Start Chrome

Dies funktioniert, da sich die ausführbare Datei von Chrome in einem Ordner befindet, der sich in der PATHUmgebungsvariablen befindet. startsucht in allen Ordnern dieser Variablen nach Programmen. Die Umgebungsvariable PATHEXTenthält eine Liste der zu suchenden Dateierweiterungen. Wie .exestandardmäßig enthalten, müssen Sie nicht schreiben chrome.exe.


start "FOO_DIR\FOO.exe"

Dies funktioniert nicht, da startdas erste Argument als Fenstertitel verwendet wird, wenn es in Anführungszeichen gesetzt wird. Dies öffnet also eine neue CMD mit "FOO_DIR\FOO.exe"dem Titel.

Um dies zu umgehen, können Sie vor Ihrem Befehl einfach ein leeres Titelargument hinzufügen:

start "" "FOO_DIR\FOO.exe"
crater2150
quelle
AFAIR, der Titel ist außerdem obligatorisch, wenn ausführbare Dateien mit Befehlszeilenschaltern
gestartet werden
1
Es ist nicht so, startdass ein Titel als erstes Argument erwartet wird (sonst start chromewürde es nicht funktionieren), es ist so, dass wenn sein erstes Argument zitiert wird, erwartet wird, dass es ein Titel ist.
Jamesdlin
@ Jamesdlin ah, die Dokumentation dazu ist etwas vage, danke. Ich habe die Antwort entsprechend bearbeitet
crater2150
5

Versuchen Sie es "title"oder zumindest ""danach start:

start "title" "FOO_DIR\FOO.exe"

oder

start "title" /B  "FOO_DIR\FOO.exe"

Die Hauptursache des Problems ist, dass das erste Argument in Anführungszeichen als titleParameter für ein neues cmdFenster interpretiert wird.

Es ist auch hilfreich, die Befehlsreferenz (Link) zu lesen.

Kunst Gertner
quelle
Danke, das hat den Unterschied verdeutlicht. Und mit dem ersten denke ich, dass "nicht ausführbare Dateien durch ihre Dateizuordnung aufgerufen werden können, indem einfach der Name der Datei als Befehl eingegeben wird." ist der Grund, warum nur der Name genug ist ... (obwohl nicht sicher)
Mr. Smith
Wenn Sie über Ihr erstes Beispiel mit sprechen, start chromeglaube ich, dass das Aufrufen von Chrome funktioniert, da es irgendwo einen Eintrag in der Registrierung hat: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths Wenn Sie nach chrome.exe suchen, werden Sie höchstwahrscheinlich Suchen Sie den Eintrag mit dem vollständigen Pfad zur ausführbaren Datei.
Art Gertner