Czy ktoś wie, czy istnieje skrypt cmd, który to robi i / lub narzędzie wiersza polecenia jest gotowe do zadania?
Czy ktoś wie, czy istnieje skrypt cmd, który to robi i / lub narzędzie wiersza polecenia jest gotowe do zadania?
Odpowiedzi:
Utwórz trzy pliki wsadowe poniżej. Main.bat uruchamia 1.bat i 2.bat
1.bat i 2.bat wypisują pliki tymczasowe, dla których sprawdza main.bat. Podczas gdy 1.bat i 2.bat działają, main.bat informuje, że przetwarzanie nadal występuje. Kiedy naciśniesz klawisz Enter w otwartym oknie 1.bat lub 2.bat, plik tymczasowy zostanie usunięty i program zostanie zamknięty. To symuluje zatrzymanie przetwarzania dla tego pliku .bat. Jeśli zrobisz to zarówno dla 1, jak i 2 bat, main.bat poinformuje cię, że przetwarzanie zostało zakończone dla tych procesów. Możesz zmusić 1.bat i 2.bat do zrobienia wszystkiego, co chcesz, pod warunkiem, że wyczyścisz plik tymczasowy po zakończeniu. W tym momencie main.bat może zrobić wszystko, co chcesz.
1. nietoperz
echo %time% > 1.tmp
pause
del 1.tmp
exit
2. nietoperz
echo %time% > 2.tmp
pause
del 2.tmp
exit
main.bat
@echo off
start "1" 1.bat
start "2" 2.bat
@ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
@ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!
To dość proste, pod warunkiem, że procesy nie wymagają standardowego wejścia lub wyjścia. Z wiersza polecenia lub w pliku wsadowym:
process1 | process2 | process3 | process4
Spowoduje to uruchomienie wszystkich czterech procesów jednocześnie i nie powróci, dopóki wszystkie się nie zakończą. (Możliwy wyjątek: jeśli proces jawnie zamyka standardowe wyjście, może być traktowany tak, jakby się zakończył. Ale to niezwykłe, bardzo niewiele procesów to robi.)
Nie jestem pewien, ile dokładnie procesów można uruchomić jednocześnie w ten sposób. Próbowałem do dziesięciu.
Jedynym sposobem na to jest uruchomienie osobnych plików wsadowych (patrz start /?
), które uruchamiają indywidualne zadanie i zapisanie pliku tekstowego po zakończeniu. Następnie okresowo sprawdzasz, czy pliki tekstowe zostały utworzone.
Możesz spojrzeć na polecenie cmdlet Start-Job Powershell. Powinno to na to pozwolić. Więcej tutaj Powershell jest powłoką wyboru Microsoft. Jest znacznie potężniejszy niż skrypty cmd i zdecydowanie nie inwestuje twojego czasu
Lub możesz użyć tego: http://www.out-web.net/?p=167
Zrobiłem to, działa, jednak czasami zdarza się, że PID ukończonego procesu jest natychmiast ponownie wykorzystywany przez inny procesor Windows, który właśnie się rozpoczął, i sprawia, że wykrycie końca twojego procesusa jest niebezpieczne / błędne.
Szukałem również podobnego zadania. Celem było uruchomienie wielu poleceń równolegle i wyodrębnienie danych wyjściowych (standardowe wyjście i błąd) wszystkich równoległych procesów. Następnie poczekaj na zakończenie wszystkich równoległych procesów i wykonaj inne polecenie. Poniżej znajduje się przykładowy kod pliku BAT, który można wykonać w CMD:
(
start "" /B cmd /c ping localhost -n 6 ^>nul
timeout /t 5 /nobreak
start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1
start "" /B cmd /c ping localhost -n 11 ^>nul
timeout /t 10 /nobreak
) | pause
Echo waited
timeout /t 12 /nobreak
Wszystkie instrukcje wewnątrz ()
są wykonywane najpierw, poczekaj na ich zakończenie, a następnie ostatnie dwa wiersze. Wszystkie polecenia start
zaczynające się od są wykonywane jednocześnie.
Te linki są pomocne: /programming//a/43762349/9689416 i https://ss64.com/nt/start.html