2009-09-19 12 views

Odpowiedz

206

pomocą polecenia START uruchomić każdy program powinien dostać to, czego potrzebujesz:

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

Każdy START inwokacja uruchamia polecenie podane w jego parametr i zwraca niezwłocznie, chyba że wykonywane za pomocą przełącznika /WAIT.

Dotyczy to aplikacji uruchamianych z wiersza polecenia. Aplikacje bez wiersza poleceń wracają jednak natychmiast, więc, aby się upewnić, że chcesz uruchomić wszystko asynchronicznie, użyj START.

+0

OK, dziękuję. Powinienem uważnie przeczytać każdy wpis "pomocy" :) – RichN

+7

Rzeczywiście miałem problemy z tym innego dnia. Musiałem uruchomić 30 okien eksploratora, aby przeprowadzić test wydajności. Nie działało i nie było dla mnie wystarczająco ważne, bym się w to zagłębił ... zacząłem przeglądać zamiast tego w tym oknie i kilka godzin później, kiedy je zamknąłem, pojawił się kolejny! I byłem jak to do diabła, zamknął ... kolejny pojawił się! Po 4-5 oknach i wielu tym, co zauważyłem, plik wsadowy nadal działa! –

+2

Bezwstydna autopromocja: kiedyś stworzyłem partię, która może działać jako pewien rodzaj puli wątków, tylko dla procesów: http://stackoverflow.com/questions/672719/parallel-execution-of-shell-processes/676667 # 676667 – Joey

21

Utwórz plik wsadowy z następujących linii:

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

start command prowadzi swoją komendę w nowym oknie, więc wszystkie 3 polecenia byłoby asynchronicznie.

26

Można użyć polecenia rozpoczęcia do tarła procesów w tle bez uruchamiania nowych okien:

start /b foo.exe

Nowy proces nie będzie nieprzerwany z CTRL-C; możesz go zabić tylko za pomocą CTRL-BREAK (lub zamykając okno lub za pomocą Menedżera zadań).

+0

Awans do "CTRL-BREAK". –

+1

Gdzie w dzisiejszych czasach jest 'BREAK' na klawiaturach? – user2023370

+0

@ user2023370 Wciąż na kluczu [Pauza] (https://en.wikipedia.org/wiki/File:ANSI_Keyboard_Layout_Diagram_with_Form_Factor.svg). Większość laptopów, które nie mają określonych kluczy, obsługuje [ukryte kombinacje klawiszy] (https://support.lenovo.com/at/en/documents/ht074004). –

56

Łącząc kilka poprzednich odpowiedzi, możesz spróbować start /b cmd /c foo.exe.

Dla trywialny przykład, jeśli chcesz wydrukować wersji Java/Groovy/grails/Gradle, można zrobić to w pliku wsadowym:

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

Jeśli masz coś podobnego Process Explorer (Sysinternals), zobaczysz kilka procesów cmd.exe każdego dziecka z procesem java (zgodnie z powyższymi poleceniami). Dane wyjściowe zostaną wydrukowane na ekranie w dowolnej kolejności.

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

Dlaczego znak @ przed rozpoczęciem dowództwo ? – Leonel

+7

uniemożliwia echo polecenia do konsoli. W skryptach wsadowych, czasami na początku zobaczysz 'echo off', które po uruchomieniu skryptu uniemożliwi echo wszystkich poleceń do konsoli. Opcja '@' jest podobny, ale tylko dla tego jednego polecenia. Tak, czasami zobaczysz '@echo off'. – djKianoosh

9

Istnieje trzecia (i potencjalnie znacznie łatwiejsza) opcja. Jeśli chcesz uruchomić wiele wystąpień pojedynczego programu, użycie procesora poleceń w stylu Unix, takiego jak Xargs lub GNU Parallel, może sprawić, że proces będzie dość prosty.

Istnieje klon win32 Xargs o nazwie PPX2, który czyni to dość prostym.

Na przykład, jeśli chcesz przekodować katalog plików wideo, można uruchomić polecenie:

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

Picking to od siebie, dir /b *.mpg chwyta listę.pliki mpg w moim bieżącym katalogu, operator | przetwarza tę listę na ppx2, która następnie tworzy serię poleceń do wykonania równolegle; 4 na raz, zgodnie z opisem podanym przez operatora -P 4. Operator -L 1 mówi ppx2, aby wysyłać tylko jeden wiersz z naszej listy katalogów do ffmpeg na raz.

Po tym wpisaniu wystarczy napisać wiersz polecenia (ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"), a {} zostanie automatycznie zastąpiony dla każdego wiersza wykazu katalogu.

Nie ma to uniwersalnego zastosowania w każdym przypadku, ale jest o wiele łatwiejsze niż w przypadku obejścia pliku wsadowego opisanego powyżej. Oczywiście, jeśli nie masz do czynienia z listą plików, możesz także przesłać zawartość pliku tekstowego lub dowolnego innego programu do danych wejściowych w formacie pxx2.

+1

Najnowszy port win32 xargs działa dobrze w dzisiejszych czasach (w każdym razie dołączony do git dla Windows). –

+0

To jest świetne, z wyjątkiem tego, że nie radzi sobie z plikami zawierającymi znaki Unicode. Jakieś plany dotyczące obsługi plików Unicode? Dzięki. –

+0

@ GökhanSever W przeszłości pracowałem nad tym problemem, używając formy "short name" ścieżki, która wygląda jak C: \ PROGRA ~ 1 \ WINDOW ~ 3 \ MYPROG ~ 1.EXE. Nie ładne, ale działa. – jmnben

12

Użyj START command:

start [programPath] 

Jeśli ścieżka do programu zawiera pamiętać spacji aby dodać cudzysłów. W tym przypadku trzeba także podać tytuł dla okna konsoli otwarcie

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

Jeśli trzeba dostarczyć argumentów dołącz je na końcu (poza cytatami dowodzenia)

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

Użyj/b opcja, aby uniknąć otwarcia nowego okna konsoli (ale w takim przypadku nie można przerwać aplikacji za pomocą CTRL-C

Powiązane problemy