2009-09-19 2 views

risposta

206

Utilizzando il comando START per eseguire ogni programma dovrebbe ottenere quello che ti serve:

START "title" [/D path] [options] "command" [parameters] 

Ogni START invocazione corre il comando dato nel suo parametro e restituisce immediatamente, a meno che non eseguito con un interruttore /WAIT.

Questo vale per le app della riga di comando. Le app senza riga di comando ritornano immediatamente ugualmente, quindi per sicurezza, se vuoi eseguire tutto in modo asincrono, usa START.

+0

Va bene, grazie. ho dovuto leggere ogni voce di 'help' attenzione. :) – RichN

+7

in realtà ho avuto problemi con questo l'altro giorno. Ho dovuto avviare 30 explorer windows per un test delle prestazioni. Non ha funzionato e non è stato abbastanza importante per me per esaminarlo ... ho iniziato a curiosare in quella finestra e diverse ore dopo, quando l'ho chiuso, ne è comparso un altro! E io ero tipo cosa diavolo, l'ho chiuso .. un altro è saltato fuori! Dopo 4-5 finestre e un sacco di quello che ho notato il file batch **** ancora in esecuzione! –

+2

Shameless auto-pubblicità: una volta ho creato un gruppo che è in grado di funzionare come una sorta di pool di thread, solo per i processi: http://stackoverflow.com/questions/672719/parallel-execution-of-shell-processes/676667 # 676667 – Joey

21

Creare un file batch con le seguenti righe:

start foo.exe 
start bar.exe 
start baz.exe 

Il start command esegue il comando in una nuova finestra, in modo che tutti i comandi 3 funzionerebbero in modo asincrono.

26

È possibile utilizzare il comando di avvio per deporre le uova i processi in background senza lanciare nuove finestre:

start /b foo.exe

Il nuovo processo non sarà interrompibile con CTRL-C; puoi ucciderlo solo con CTRL-BREAK (o chiudendo la finestra, o tramite Task Manager.)

+0

Voto positivo per '' CTRL-BREAK''. –

+1

Dove è "BREAK" sulle tastiere in questi giorni? – user2023370

+0

@ user2023370 Sempre sul tasto [Pausa] (https://en.wikipedia.org/wiki/File:ANSI_Keyboard_Layout_Diagram_with_Form_Factor.svg). La maggior parte dei portatili che mancano di determinati tasti supportano [combinazioni di tasti nascosti] (https://support.lenovo.com/at/en/documents/ht074004). –

56

Combinando un paio delle risposte precedenti, potresti provare start /b cmd /c foo.exe.

Per un esempio banale, se si vuole stampare le versioni di Java/Groovy/Grails/Gradle, si potrebbe fare questo in un file batch:

@start /b cmd /c java -version 
@start /b cmd /c gradle -version 
@start /b cmd /c groovy -version 
@start /b cmd /c grails -version 

Se si dispone di qualcosa come Process Explorer (Sysinternals), vedrai alcuni processi figlio di cmd.exe ciascuno con un processo java (come per i comandi precedenti). L'output verrà stampato sullo schermo in qualsiasi ordine finiscano.

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 
+0

Perché il segno @ prima dell'inizio comando? – Leonel

+7

impedisce al comando di essere echeggiato alla console. Negli script batch, a volte si vedrà 'echo off' all'inizio che, quando si esegue lo script, impedirà l'eco di tutti i comandi alla console. '@' È simile ma solo per quel singolo comando. Quindi, a volte vedrai '@echo off'. – djKianoosh

9

C'è una terza opzione (e potenzialmente molto più semplice). Se vuoi far ruotare più istanze di un singolo programma, usare un processore di comando in stile Unix come Xargs o GNU Parallel può renderlo un processo abbastanza semplice.

C'è un clone Xargs Win32 chiamato PPX2 che lo rende abbastanza semplice.

Per esempio, se si voleva convertire una directory di file video, è possibile eseguire il comando:

dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4" 

Picking questa parte, dir /b *.mpg afferra un elenco di.file mpg nella mia directory corrente, l'operatore | canalizza questo elenco in ppx2, che quindi costruisce una serie di comandi da eseguire in parallelo; 4 alla volta, come specificato qui dall'operatore -P 4. L'operatore -L 1 dice a ppx2 di inviare solo una riga della nostra directory a ffmpeg alla volta.

Dopo di che, basta scrivere la riga di comando (ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"), e {} ottiene automaticamente sostituiti per ogni riga del tuo elenco di directory.

Non è universalmente applicabile a tutti i casi, ma è molto più semplice rispetto all'utilizzo delle soluzioni alternative per i file batch sopra descritte. Naturalmente, se non si ha a che fare con un elenco di file, è possibile anche reindirizzare il contenuto di un file di testo o di qualsiasi altro programma nell'input di pxx2.

+1

L'ultima porta win32 di xargs funziona bene al giorno d'oggi (quella inclusa con git per Windows comunque). –

+0

Ciò è eccezionale, tranne che non riesce a gestire i file contenenti caratteri Unicode. Qualche piano per supportare i file Unicode? Grazie. –

+0

@ GökhanSever In passato ho risolto questo problema utilizzando il modulo "nome breve" del percorso, che assomiglia a C: \ PROGRA ~ 1 \ WINDOW ~ 3 \ MYPROG ~ 1.EXE. Non carino, ma funziona. – jmnben

12

Utilizzare la START command:

start [programPath] 

Se il percorso del programma contiene spazi ricordarsi di aggiungere le citazioni. In questo caso è inoltre necessario fornire un titolo per la finestra della console di apertura

start "[title]" "[program path]" 

Se è necessario fornire argomenti li aggiunge alla fine (al di fuori delle citazioni di comando)

start "[title]" "[program path]" [list of command args] 

Utilizzare il/b opzione per evitare l'apertura di una nuova finestra di console (ma in tal caso non si può interrompere l'applicazione utilizzando CTRL-C