Передайте команду PAUSE команде START в командном файле - PullRequest
0 голосов
/ 24 ноября 2018

Допустим, у меня есть пакетный файл с кучей строк, каждая из которых начинается с START, для одновременного выполнения команд, и я хочу, чтобы у каждого из них появлялось новое окно, которое просто делало паузу после завершения, а не просто закрывалось, так что яможет прочитать сводку в конце.

start myapp.exe && pause не работает, так как команда pause просто выполняется в главном окне и не передается с START.CMD /k работает для предотвращения окна, но я хотел бы избежать этого и использовать PAUSE.

Важно, чтобы я запускал их одновременно, и я не хочу создавать отдельный командный файл длякаждая строка.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Команда 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 была передана фиктивная заглавная буква (в данном случае пустой заголовок "").

0 голосов
/ 24 ноября 2018

Вам просто нужно экранировать оператор && с помощью ^ вроде: start myapp.exe ^&& pause

Но вам лучше использовать оператор &, который запускает вторую команду, независимо от того, успешна ли первая команда, в противном случае, если myapp.exe устанавливаеткод ошибки, пауза не будет запущена, и окно закроется, прежде чем вы сможете его увидеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...