В чем разница между следующими сценариями 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"названием.

Чтобы обойти это, вы можете просто добавить пустой аргумент title перед вашей командой:

start "" "FOO_DIR\FOO.exe"
crater2150
источник
Кроме того, AFAIR, заголовок обязателен при запуске исполняемых файлов с переключателями командной строки
abstrask
1
Дело не в том, startчто заголовок ожидается в качестве первого аргумента (в противном случае start chromeон не будет работать), а в том, что если его первый аргумент заключен в кавычки, он ожидает, что он будет заголовком.
Джеймсдлин
@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 \ App Paths Если вы ищете chrome.exe, вы, скорее всего, найти запись, содержащую полный путь к исполняемому файлу.
Арт Гертнер