Яка різниця між наведеними нижче скриптами cmd?


10

Я спробував запустити кілька програм через пакетний файл і зіткнувся з проблемами, але це було в минулому.

Я відносно новий у скриптах та командних рядках, і це моє запитання: в чому різниця між наведеними нижче скриптами cmd?

Це прийнято

Start Chrome

(Я здогадуюсь тут, що деякі встановлені програми розпізнаються за заголовком, навіть незважаючи на те, що dir не там, де chrome.exe - програма, яка все ще запускається, ключі реєстру відіграють певну роль у цьому?)

це також працює

cd "FOO_DIR"
start FOO.exe

однак цього немає

start "FOO_DIR\FOO.exe"

(відкриває нове вікно без запуску FOO.exe)

start /B "FOO_DIR\FOO.exe"

(знову пише текст авторських прав і більше нічого не робить)

(ОС Windows 7 x64)

Відповіді:


17
Start Chrome

Це працює, тому що виконуваний файл Chrome розміщений у папці, яка знаходиться в PATHзмінній оточення. startшукає програми у всіх папках цієї змінної. Змінна середовища PATHEXTмістить перелік розширень файлів, які потрібно шукати, і як .exeвони містяться за замовчуванням, писати не потрібно chrome.exe.


start "FOO_DIR\FOO.exe"

Це не працює, оскільки startвикористовуватиме перший аргумент як назву вікна, якщо він буде цитуватися. Таким чином, це відкриє новий CMD з "FOO_DIR\FOO.exe"його заголовком.

Щоб обійти це, ви можете просто додати порожній аргумент заголовка перед вашою командою:

start "" "FOO_DIR\FOO.exe"

Крім того, AFAIR, заголовок є обов'язковим при запуску виконуваних файлів за допомогою перемикачів командного рядка
abstrask

1
Це не те, що startочікує, що заголовок є його першим аргументом (інакше start chromeне виходить), це те, що якщо його перший аргумент буде процитовано, він очікує, що це буде заголовок.
jamesdlin

@jamesdlin ах, документація на це трохи розпливчаста, дякую. Відповідь я відредагував відповідно
crater2150

5

Спробуйте додати "title"або принаймні ""після startцього:

start "title" "FOO_DIR\FOO.exe"

або

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

Першопричиною проблеми є те, що перший аргумент у "" цитатах інтерпретується як titleпараметр для нового cmdвікна.

Також допомагає переглянути посилання на команду (посилання)


Дякую, що прояснила різницю. І з першим я думаю, що "Невиконані файли можуть викликатися через їх файлову асоціацію, просто ввівши ім'я файлу як команду." є причиною, чому достатньо лише імені ... (хоча не впевнений)
Містер Сміт

Якщо ви говорите про приклад своїх стрільців, start chromeя вважаю, що виклик chrome працює, тому що в ньому є запис у реєстрі десь тут: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Paths App Якщо ви шукаєте chrome.exe, ви, швидше за все, знайти запис, що містить повний шлях до виконуваного файлу.
Арт Гертнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.