Odpowiedzi:
Użycie START
polecenia do uruchomienia każdego programu powinno zapewnić ci to, czego potrzebujesz:
START "title" [/D path] [options] "command" [parameters]
Każde START
wywołanie uruchamia polecenie podane w parametrze i natychmiast zwraca, chyba że zostanie wykonane /WAIT
przełącznikiem.
Dotyczy to aplikacji wiersza polecenia. Aplikacje bez wiersza polecenia i tak natychmiast wracają, więc aby się upewnić, jeśli chcesz uruchomić wszystko asynchronicznie, użyj START
.
Łącząc kilka poprzednich odpowiedzi, możesz spróbować start /b cmd /c foo.exe
.
Na przykład, jeśli chcesz wydrukować wersje java / groovy / grails / gradle, możesz to zrobić 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ś takiego jak Process Explorer (Sysinternals), zobaczysz kilka potomnych procesów cmd.exe, każdy 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
echo off
na początku, które po uruchomieniu skryptu zapobiegną odbiciu wszystkich poleceń na konsoli. @
Jest podobny, ale tylko dla tego jednego polecenia. Czasami więc zobaczysz @echo off
.
Możesz użyć polecenia start, aby spawnować procesy w tle bez uruchamiania nowych okien:
start /b foo.exe
Nowy proces nie będzie przerywany za pomocą CTRL-C; możesz go zabić tylko za pomocą CTRL-BREAK (lub zamykając okno lub za pomocą Menedżera zadań).
BREAK
klawiatura?
Użyj polecenia START :
start [programPath]
Jeśli ścieżka do programu zawiera spacje, pamiętaj o dodaniu cudzysłowów. W takim przypadku musisz także podać tytuł otwierającego okna konsoli
start "[title]" "[program path]"
Jeśli musisz podać argumenty, dołącz je na końcu (poza cudzysłowami poleceń)
start "[title]" "[program path]" [list of command args]
Użyj opcji / b, aby uniknąć otwierania nowego okna konsoli (ale w takim przypadku nie można przerwać aplikacji za pomocą CTRL-C
Istnieje trzecia (i potencjalnie znacznie łatwiejsza) opcja. Jeśli chcesz rozdzielić wiele wystąpień jednego programu, użycie procesora poleceń w stylu uniksowym, takiego jak Xargs lub GNU Parallel, może uczynić ten proces dość prostym.
Istnieje klon Xargs win32 o nazwie PPX2, który czyni to dość prostym.
Na przykład, jeśli chcesz transkodować katalog plików wideo, możesz uruchomić polecenie:
dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
Po oddzieleniu tego, dir /b *.mpg
pobiera listę plików .mpg w moim bieżącym katalogu, |
operator przesyła tę listę do ppx2, który następnie buduje serię poleceń do wykonania równoległego; 4 na raz, jak określono tutaj przez -P 4
operatora. -L 1
Operator mówi ppx2 aby wysłać tylko jedną linię naszego katalogu nieruchomość ffmpeg naraz.
Następnie wystarczy napisać wiersz poleceń ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
) i {}
zostanie automatycznie podstawiony dla każdego wiersza listy katalogów.
Nie jest to uniwersalne zastosowanie do każdego przypadku, ale jest o wiele łatwiejsze niż użycie opisanych powyżej obejść pliku wsadowego. Oczywiście, jeśli nie masz do czynienia z listą plików, możesz również potokować zawartość pliku tekstowego lub innego programu do wejścia pxx2.
Nie mogłem dostać niczego do pracy Skończyło się na tym, że używałem programu PowerShell do uruchamiania skryptów bat .. Czasami nawet uruchomienie cmd / c nie działa, nie wiem dlaczego .. Próbowałem nawet takich rzeczy, jak uruchomienie cmd / c Notatnik i wyjście
start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
help
uważnie przeczytać każdy wpis . :)