Diga, se eu tiver
- foo.exe
- bar.exe
- baz.exe
Como executo todos eles a partir de um arquivo em lotes de forma assíncrona, ou seja, sem esperar a interrupção do programa anterior?
batch-file
cmd
RichN
fonte
fonte
help
cuidadosamente. :)Combinando algumas das respostas anteriores, você pode tentar
start /b cmd /c foo.exe
.Para um exemplo trivial, se você quiser imprimir as versões de java / groovy / grails / gradle, poderá fazer isso em um arquivo em lotes:
Se você tiver algo como o Process Explorer (Sysinternals), verá alguns processos filho cmd.exe, cada um com um processo java (conforme os comandos acima). A saída será impressa na tela em qualquer ordem em que forem concluídas.
fonte
echo off
no início que, quando você executa o script, impede que todos os comandos sejam ecoados no console. O@
é semelhante, mas apenas para esse único comando. Então, às vezes você verá@echo off
.Você pode usar o comando start para gerar processos em segundo plano sem iniciar novas janelas:
start /b foo.exe
O novo processo não será interrompível com o CTRL-C; você pode matá-lo apenas com CTRL-BREAK (ou fechando a janela ou através do Gerenciador de tarefas).
fonte
BREAK
teclado hoje em dia?Crie um arquivo em lotes com as seguintes linhas:
O comando start executa seu comando em uma nova janela, para que todos os 3 comandos sejam executados de forma assíncrona.
fonte
Use o comando START :
Se o caminho para o programa contiver espaços, lembre-se de adicionar aspas. Nesse caso, você também precisa fornecer um título para a janela do console de abertura
Se você precisar fornecer argumentos, anexe-os no final (fora das aspas de comando)
Use a opção / b para evitar abrir uma nova janela do console (mas, nesse caso, você não pode interromper o aplicativo usando CTRL-C
fonte
Existe uma terceira opção (e potencialmente muito mais fácil). Se você deseja ativar várias instâncias de um único programa, o uso de um processador de comandos no estilo Unix, como o Xargs ou o GNU Parallel, pode tornar isso um processo bastante simples.
Há um clone Xargs win32 chamado PPX2 que torna isso bastante simples.
Por exemplo, se você quiser transcodificar um diretório de arquivos de vídeo, poderá executar o comando:
Separando isso,
dir /b *.mpg
pega uma lista de arquivos .mpg no meu diretório atual, o|
operador canaliza essa lista para o ppx2, que cria uma série de comandos a serem executados em paralelo; 4 de cada vez, conforme especificado aqui pelo-P 4
operador. O-L 1
operador diz ao ppx2 para enviar apenas uma linha da nossa lista de diretórios para ffmpeg por vez.Depois disso, basta escrever sua linha de comando (
ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
) e{}
será automaticamente substituída por cada linha da sua listagem de diretórios.Não é universalmente aplicável a todos os casos, mas é muito mais fácil do que usar as soluções alternativas de arquivos em lote detalhadas acima. Obviamente, se você não está lidando com uma lista de arquivos, também pode canalizar o conteúdo de um arquivo de texto ou qualquer outro programa na entrada do pxx2.
fonte
Eu não consegui fazer nada funcionar. Acabei usando o powershell para iniciar scripts bat .. às vezes até o cmd / c não funciona, não sei por quê .. Eu até tentei coisas como start cmd / c notepad & exit
fonte