2008-12-08 14 views
6

Piszę plik wsadowy, w którym wywołuję EXE do wykonania. Teraz instrukcje po wywołaniu pliku EXE nie powinny być wykonywane, dopóki EXE nie zakończy jego wykonywania. Jak mogę to zrobić w pliku wsadowym (w systemie Windows)?Jak uzyskać plik wsadowy systemu Windows do wstrzymania podczas wykonywania pliku wykonywalnego?

+0

Myślę, że zależy to trochę od uruchomionych aplikacji. Jeśli aplikacja jest programem uruchamiającym, który uruchamia inne usługi lub GUI, to myślę, że niewiele można zrobić bez pisania aplikacji do monitorowania procesów i/lub okien. –

Odpowiedz

0

Można użyć

PAUSE 

skryptów partii, ale nie rozumiem Twoje pytanie.

+0

'Pauza' wais do naciśnięcia klawisza. To nie zadziała w przypadku skryptu automatycznego, ponieważ nie ma tam użytkownika. James "chce zautomatyzowanego skryptu uruchomić jeden program, poczekać na zakończenie i wyjście, a następnie uruchomić drugi program. –

6

Instrukcje w pliku wsadowym są wykonywane sekwencyjnie. Jeśli Twój plik wsadowy wygląda następująco:

first.exe 
next.exe 

Następna jest wykonywana, jeśli pierwsza jest zakończona.

+0

Wypróbuj to za pomocą programu explorer.exe, a zobaczysz, że powróci po uruchomieniu programu, a nie został zakończony. – paxdiablo

+0

@Pax: zależy to od zakresu pytania. Ogólnie rzecz biorąc, w pliku wsadowym zwykle umieszczane są tylko narzędzia wiersza polecenia, a nie narzędzia GUI. – PhiLho

+0

Zwykle, ale nie zawsze - Mam plik wsadowy uruchamiania w moim wirtualnym pudełku od pracy z domu, który uruchamia graficznego klienta VPN (następnie pocztę, narzędzie błędu itp.). Na szczęście ma przełącznik wiersza poleceń, który powoduje, że nie powraca do końca, ponieważ nie mogłem go uruchomić/czekać, aby to zrobić.Ale twoja uwaga została podjęta. – paxdiablo

7

To zależy od sposobu działania .exe. Obawiam się, że nie mam wszystkich szczegółów technicznych ani terminologii, ale niektóre pliki .exe zwrócą kontrolę nad sesją natychmiast po rozpoczęciu, podczas gdy inne nie zwrócą kontroli, dopóki program się nie zakończy.

Drugi przypadek jest łatwy, ponieważ polecenia późno w pliku nie zostaną wykonane, dopóki pierwszy z nich nie zostanie zakończony, więc zakładam, że napotykamy przypadek nr 1.

Łatwe obejście/włamanie, jeśli wykonanie trwa (w przybliżeniu) tyle samo czasu przy każdym uruchomieniu, to użycie polecenia ping z opóźnieniem.

PING 127.0.0.1 -n 1 -w 120000 >NUL 

Spowoduje to uruchomienie polecenia ping z opóźnieniem 120000ms (2 min).

Istnieje również dobry artykuł na temat bardziej złożonej (ale bardziej niezawodnej metody) na fpschultze.de z bardziej szczegółowym wyjaśnieniem. Krótko mówiąc, wyszukujesz listę zadań wyszukując plik wykonywalny, na który czekasz. Jak tylko go tam nie będzie, będziesz kontynuował z plikiem wsadowym. Używa również metody ping, ale w inny sposób.

+1

Właściwy sposób jest w rzeczywistości: PING 127.1 -n 10 -w 1000> NUL – djangofan

+0

@djangofan - działa idealnie z twoją korektą. – SFun28

+0

Niestety, proponowane obejście tego problemu jest po prostu okropne. Jest podatny na błędy i trudny do zrozumienia. Istnieje wiele lepszych sposobów wstrzymania na pewien czas (na przykład przekroczenia limitu czasu). – mafu

4

Możesz użyć polecenia "start" z parametrem/wait użyć start /? w wierszu poleceń po szczegóły.

+0

Spróbuj, jak mogę, nie mogę uzyskać "start/wait explorer.exe", aby rzeczywiście czekać ... – paxdiablo

13
START /WAIT First.exe 
START /WAIT Second.exe 
2

Oto bardzo prosty proces. Wystarczy zachować następującą linię do odczekać 10 sekund, a następnie kontynuowanie innych poleceń ...

TIMEOUT /T 10

To wszystko, co musisz zrobić. Mam nadzieję, że spodoba ci się moja technika.

Powiązane problemy