Jaka jest różnica między poniższymi skryptami cmd?

10

Próbowałem uruchomić kilka programów za pomocą pliku wsadowego i napotkałem problemy, ale to już przeszłość.

Jestem stosunkowo nowy w skryptach i wierszach poleceń i oto moje pytanie: Jaka jest różnica między następującymi skryptami cmd?

Ten jest zaakceptowany

Start Chrome

(Zgaduję tutaj, że niektóre zainstalowane programy są rozpoznawane po tytule, mimo że w katalogu nie ma miejsca, w którym program chrome.exe nadal się uruchamia, klucze rejestru odgrywają w tym rolę?)

ten też działa

cd "FOO_DIR"
start FOO.exe

jednak one nie

start "FOO_DIR\FOO.exe"

(otwiera nowe okno bez uruchamiania FOO.exe)

start /B "FOO_DIR\FOO.exe"

(ponownie pisze tekst o prawach autorskich i nic więcej nie robi)

(OS Windows 7 x64)

Pan Smith
źródło

Odpowiedzi:

17
Start Chrome

Ten działa, ponieważ plik wykonywalny Chrome znajduje się w folderze, który znajduje się w PATHzmiennej środowiskowej. startszuka programów we wszystkich folderach w tej zmiennej. Zmienna środowiskowa PATHEXTzawiera listę rozszerzeń plików, których należy szukać, a ponieważ .exejest zawarta domyślnie, nie musisz pisać chrome.exe.


start "FOO_DIR\FOO.exe"

To nie działa, ponieważ startużyje swojego pierwszego argumentu jako tytułu okna, jeśli jest cytowany. To otworzy nowy CMD z "FOO_DIR\FOO.exe"tytułem.

Aby to obejść, możesz po prostu dodać pusty argument tytułu przed poleceniem:

start "" "FOO_DIR\FOO.exe"
krater2150
źródło
Ponadto, AFAIR, tytuł jest obowiązkowy podczas uruchamiania plików wykonywalnych za pomocą przełączników wiersza polecenia
abstrask
1
Nie jest tak, że startoczekuje tytułu jako pierwszego argumentu (inaczej start chromenie zadziałałoby), ale to, że jeśli cytowany zostanie pierwszy argument, oczekuje, że będzie to tytuł.
jamesdlin
@jamesdlin ah, dokumentacja na ten temat jest nieco niejasna, dzięki. Odpowiednio zredagowałem odpowiedź
krater 2150
5

Spróbuj dodać "title"lub przynajmniej ""po starttak:

start "title" "FOO_DIR\FOO.exe"

lub

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

Główną przyczyną problemu jest to, że pierwszy argument w cudzysłowach jest interpretowany jako titleparametr nowego cmdokna.

Pomaga także spojrzeć na odniesienie do polecenia (link)

Art Gertner
źródło
Dzięki, to wyjaśniło różnicę. I z pierwszym myślę, że „Pliki niewykonywalne mogą być wywoływane przez ich powiązanie plików, po prostu wpisując nazwę pliku jako polecenie”. jest powodem, dla którego wystarczy sama nazwa ... (choć nie jestem pewien)
Pan Smith
Jeśli mówisz o swoim pierwszym przykładzie, start chromeuważam, że wywołanie chrome działa, ponieważ ma on gdzieś tutaj wpis do rejestru: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths Jeśli szukasz chrome.exe, najprawdopodobniej znajdź pozycję zawierającą pełną ścieżkę do pliku wykonywalnego.
Art Gertner,