Скажи, если у меня есть
- foo.exe
- bar.exe
- baz.exe
Как мне запустить их все из командного файла асинхронно, то есть не дожидаясь остановки предыдущей программы?
Скажи, если у меня есть
Как мне запустить их все из командного файла асинхронно, то есть не дожидаясь остановки предыдущей программы?
Использование команды START
для запуска каждой программы должно дать вам то, что вам нужно:
START "title" [/D path] [options] "command" [parameters]
При каждом вызове START
выполняется команда, указанная в его параметре, и выполняется немедленный возврат, если только он не выполняется с переключателем /WAIT
.
Это относится к приложениям командной строки. Приложения без командной строки в любом случае возвращаются немедленно, поэтому, конечно, если вы хотите запускать все асинхронно, используйте START
.
help
. :)
- person RichN; 19.09.2009
Объединив пару предыдущих ответов, вы можете попробовать start /b cmd /c foo.exe
.
В качестве тривиального примера, если вы хотите распечатать версии java / groovy / grails / gradle, вы можете сделать это в пакетном файле:
@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version
Если у вас есть что-то вроде Process Explorer (Sysinternals), вы увидите несколько дочерних процессов cmd.exe, каждый из которых имеет процесс java (в соответствии с приведенными выше командами). Результат будет выводиться на экран в любом порядке.
start /b : Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application
cmd /c : Carries out the command specified by string and then terminates
echo off
в начале, что при выполнении сценария предотвратит вывод всех команд на консоль. @
аналогичен, но только для этой единственной команды. Так что иногда вы увидите @echo off
.
- person djKianoosh; 29.02.2016
Вы можете использовать команду start для запуска фоновых процессов без запуска новых окон:
start /b foo.exe
Новый процесс нельзя будет прервать с помощью CTRL-C; убить его можно только с помощью CTRL-BREAK (или закрыв окно, или через диспетчер задач).
BREAK
на клавиатурах?
- person user2023370; 10.01.2016
Создайте командный файл со следующими строками:
start foo.exe
start bar.exe
start baz.exe
start command запускает вашу команду в новом окне, поэтому все 3 команды будут выполняться асинхронно.
Используйте команду START:
start [programPath]
Если путь к программе содержит пробелы, не забудьте добавить кавычки. В этом случае вам также необходимо указать заголовок для открывающегося окна консоли.
start "[title]" "[program path]"
Если вам нужно предоставить аргументы, добавьте их в конце (вне кавычек команд)
start "[title]" "[program path]" [list of command args]
Используйте параметр / b, чтобы не открывать новое окно консоли (но в этом случае вы не можете прервать работу приложения с помощью CTRL-C
Есть третий (и потенциально намного более простой) вариант. Если вы хотите запустить несколько экземпляров одной программы, использование командного процессора в стиле Unix, такого как Xargs или GNU Parallel, может сделать это довольно простым процессом.
Существует клон Win32 Xargs под названием PPX2, который делает это довольно простым.
Например, если вы хотите перекодировать каталог видеофайлов, вы можете запустить команду:
dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
Выделив это отдельно, 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
start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden