Czy ktoś wie, czy istnieje skrypt cmd, który to robi i / lub narzędzie wiersza polecenia jest gotowe do zadania?
14
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
2. nietoperz
main.bat
źródło
To dość proste, pod warunkiem, że procesy nie wymagają standardowego wejścia lub wyjścia. Z wiersza polecenia lub w pliku wsadowym:
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.
źródło
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.źródło
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
źródło
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.
źródło
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 poleceniastart
zaczynające się od są wykonywane jednocześnie.Te linki są pomocne: /programming//a/43762349/9689416 i https://ss64.com/nt/start.html
źródło