Скажи, если у меня есть
- foo.exe
- bar.exe
- baz.exe
Как мне запустить их все из пакетного файла асинхронно, то есть, не дожидаясь остановки предыдущей программы?
batch-file
cmd
RichN
источник
источник
help
внимательно. :)Объединяя пару предыдущих ответов, вы можете попробовать
start /b cmd /c foo.exe
.Для тривиального примера, если вы хотите распечатать версии java / groovy / grails / gradle, вы можете сделать это в пакетном файле:
Если у вас есть что-то вроде Process Explorer (Sysinternals), вы увидите несколько дочерних процессов cmd.exe, каждый из которых имеет процесс Java (согласно приведенным выше командам). Вывод будет распечатан на экране в любом порядке.
источник
echo off
в начале, что при выполнении сценария будет предотвращать вывод всех команд на консоль. Это@
похоже, но только для этой единственной команды. Так что иногда вы увидите@echo off
.Вы можете использовать команду запуска для запуска фоновых процессов без запуска новых окон:
start /b foo.exe
Новый процесс не будет прерываться с помощью CTRL-C; Вы можете убить его только с помощью CTRL-BREAK (или закрыв окно, или через диспетчер задач.)
источник
BREAK
на клавишах?Создайте командный файл со следующими строками:
Команда запуска запускает вашу команду в новом окне, поэтому все 3 команды будут выполняться асинхронно.
источник
Используйте команду START :
Если путь к программе содержит пробелы, не забудьте добавить кавычки. В этом случае вам также необходимо указать заголовок открывающегося окна консоли.
Если вам нужно предоставить аргументы, добавьте их в конце (за пределами кавычек команды)
Используйте параметр / b, чтобы избежать открытия нового окна консоли (но в этом случае вы не можете прервать приложение с помощью CTRL-C
источник
Есть третий (и потенциально гораздо более простой) вариант. Если вы хотите раскрутить несколько экземпляров одной программы, использование командного процессора в стиле Unix, такого как Xargs или GNU Parallel, может сделать этот процесс довольно простым.
Есть клон win32 Xargs под названием PPX2, который делает это довольно просто.
Например, если вы хотите перекодировать каталог видеофайлов, вы можете выполнить команду:
Разбирая это,
dir /b *.mpg
захватывает список файлов .mpg в моем текущем каталоге,|
оператор передает этот список в ppx2, который затем строит серию команд, которые будут выполняться параллельно; 4 за один раз, как указано здесь-P 4
оператором.-L 1
Оператор говорит ppx2 только послать одну линию нашего каталога листинг на FFmpeg в то время.После этого вы просто пишете свою командную строку (
ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
) и{}
автоматически подставляете для каждой строки списка каталогов.Это не универсально применимо к каждому случаю, но намного проще, чем использование обходных путей командного файла, описанных выше. Конечно, если вы не имеете дело со списком файлов, вы также можете передать содержимое текстового файла или любой другой программы на вход pxx2.
источник
Я не мог заставить что-либо работать, я закончил тем, что просто использовал powershell для запуска сценариев bat ... Иногда даже запуск cmd / c не работает, не знаю почему .. Я даже пробовал такие вещи, как start cmd / c notepad & exit
источник