Jak działa komenda START z opcją WAIT
START /wait notepad.exe
START /wait notepad.exe
... różni się od używania polecenia CALL?
CALL notepad.exe
CALL notepad.exe
Czy jest sytuacja, w której jeden może zachowywać się inaczej niż drugi w zależności od tego, co jest wykonywane?
windows
batch-file
Czad
źródło
źródło
Odpowiedzi:
Przypuszczam, że w przypadku plików exe różnice są prawie nieistotne.
Ale aby rozpocząć exe , nawet nie potrzebujesz
CALL
.Przy uruchamianiu kolejnej partii jest to duża różnica,
ponieważ
CALL
uruchomi ją w tym samym oknie, a wywołana partia ma dostęp do tego samego kontekstu zmiennej.Więc może również zmieniać zmienne, które mają wpływ na dzwoniącego.
START
utworzy nowy cmd.exe dla wywołanego wsadu i bez / b otworzy nowe okno.Ponieważ jest to nowy kontekst, zmiennych nie można udostępniać.
Różnice
Użycie
start /wait <prog>
- Zmiany zmiennych środowiskowych są tracone po
<prog>
zakończeniu- Wzywający czeka na
<prog>
zakończenieUżycie
call <prog>
- w przypadku exe może zostać pominięte, ponieważ jest równe tylko uruchomieniu
<prog>
- w przypadku exe-prog partia wywołującego czeka lub uruchamia exe asynchronicznie, ale zachowanie zależy od samego exe .
- W przypadku plików wsadowych partia wywołującego jest kontynuowana, po
<batch-file>
zakończeniu wywołania BEZ wywołania sterowanie nie wróci do partii wywołującegoUzupełnienie:
Za pomocą
CALL
można zmienić parametry (dla plików wsadowych i plików exe), ale tylko wtedy, gdy zawierają one znaki daszków lub procent.Zostanie rozwinięty do (z pliku wsadowego)
źródło
start /wait /b cmd /c <batchfile.bat>
że pliki wsadowe są uruchamiane jeden po drugim w tym samym oknie poleceńcall batchfile.bat
Myślę, że powinny one generalnie działać tak samo, ale są pewne różnice.
START
jest zwykle używany do uruchamiania aplikacji lub uruchamiania aplikacji domyślnej dla danego typu pliku. W ten sposób, jeśliSTART http://mywebsite.com
tak nie jestSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
uruchomi Microsoft Word i otworzy myworddoc.docx.CALL myworddoc.docx
robi to samo ... jednakSTART
zapewnia więcej opcji dla stanu okna i tego typu rzeczy. Umożliwia również ustawienie priorytetu i powinowactwa procesu.Krótko mówiąc, biorąc pod uwagę dodatkowe opcje oferowane przez start, powinno to być Twoje narzędzie z wyboru.
źródło
Na przykład istnieje użyteczna różnica między
call
istart /wait
podczas wywoływania,regsvr32.exe /s
do której również odwołuje się Gary w jego odpowiedzi na temat: jak-zrobić-i-uzyskać-kod-wyjścia-aplikacji-z-wiersza-poleceń-systemu Windowszawsze zwróci 0 ale
zwróci poziom błędu z regsvr32.exe
źródło
Oto, co znalazłem podczas równoległego uruchamiania plików wsadowych (wiele wystąpień tego samego pliku bat w tym samym czasie z różnymi parametrami wejściowymi):
Powiedzmy, że masz plik exe, który wykonuje długie zadanie o nazwie LongRunningTask.exe
Jeśli wywołasz exe bezpośrednio z pliku bat, tylko pierwsze wywołanie LongRunningTask powiedzie się, podczas gdy reszta otrzyma błąd systemu operacyjnego „Plik jest już używany przez proces”
Jeśli używasz tego polecenia:
start / B / WAIT "" "LongRunningTask.exe" "parametry"
Będziesz mógł uruchomić wiele instancji nietoperza i exe, jednocześnie czekając na zakończenie zadania, zanim bat będzie kontynuował wykonywanie pozostałych poleceń. Opcja / B ma na celu uniknięcie tworzenia innego okna, puste cudzysłowy są potrzebne, aby polecenie działało, patrz odniesienie poniżej.
Zwróć uwagę, że jeśli nie użyjesz / WAIT na początku, LongRunningTask zostanie wykonane w tym samym czasie, co pozostałe polecenia w pliku wsadowym, więc może to spowodować problemy, jeśli jedno z tych poleceń wymaga danych wyjściowych LongRunningTask
Wznowienie:
To nie może przebiegać równolegle:
Będzie to działać równolegle i będzie w porządku, o ile nie ma zależności danych między danymi wyjściowymi polecenia a resztą pliku bat:
Będzie to działać równolegle i czekać na zakończenie zadania, więc możesz użyć danych wyjściowych:
Odniesienie do polecenia start: Jak uruchomić program z pliku wsadowego bez pozostawiania otwartej konsoli po uruchomieniu programu?
źródło
Połączenie
Wywołuje jeden program wsadowy z innego bez zatrzymywania nadrzędnego programu wsadowego. Polecenie call akceptuje etykiety jako cel wywołania. Wywołanie nie działa w wierszu poleceń, gdy jest używane poza skryptem lub plikiem wsadowym. https://technet.microsoft.com/en-us/library/bb490873.aspx
Początek
Uruchamia osobne okno wiersza polecenia, aby uruchomić określony program lub polecenie. Polecenie start użyte bez parametrów otwiera drugie okno wiersza polecenia. https://technet.microsoft.com/en-us/library/bb491005.aspx
źródło
To stary wątek, ale właśnie spotkałem się z tą sytuacją i odkryłem zgrabny sposób jej obejścia. Próbowałem uruchomić plik setup.exe, ale fokus wracał do następnego wiersza skryptu bez czekania na zakończenie działania setup.exe. Wypróbowałem powyższe rozwiązania bez powodzenia.
W końcu przepuszczenie polecenia przez więcej załatwiło sprawę.
setup.exe {argumenty} | więcej
źródło