Команда start
может использоваться только для вызова одной внутренней или внешней команды.Для передачи дополнительных команд вы должны передать команды новому экземпляру CMD и экранировать любые специальные символы, чтобы иметь возможность передать их дочернему процессу (в данном случае CMD.EXE).
start cmd /c myapp.exe ^& pause
В качестве дополнения, если включены расширения команд (это случай по умолчанию), «CMD» может использоваться вместо cmd или cmd.exe , ...
Обратите внимание, что это должен быть "CMD "
с дополнительным пробелом после CMD
, поэтому он отличается от "CMD"
Цитируется из справки команды запуска:
Если включены расширения команд, внешний вызов команды через командную строку или команду START изменяется следующим образом:
.
.
.
При выполнении командной строки, первым токеном которой является строка «CMD» без расширения или спецификатора пути, тогда «CMD» заменяется значением переменной COMSPEC.Это предотвращает загрузку CMD.EXE из текущего каталога.
Таким образом, более безопасный подход будет
start "" "CMD " /c myapp.exe ^& pause
Функционально эквивалентен
start "" "%COMSPEC%" /c myapp.exe ^& pause
Поскольку первый аргумент команды start
, заключенный в кавычки, будет интерпретироваться как заголовок окна, в качестве первого аргумента команды start
была передана фиктивная заглавная буква (в данном случае пустой заголовок ""
).