2011-01-12 16 views
39

Tworzę prosty plik wsadowy, aby pomóc w kilku rzeczach, a także mam instrukcje, które również wypisuje, a które chcę zobaczyć przed wyjściem. Obecnie okno zamyka się bardzo szybko. Więc dodałem PAUSE na końcu pliku, ale to nie chce działać.Polecenie pliku wsadowego PAUSE nie działa

Przyjrzałem się innym pytaniom na temat SO i sprawdziłem, czy końcówki linii mają numer CRLF, a na końcu pliku mam CRLF.

Wszelkie sugestie?

+1

Robisz coś innego złego. Po prostu wypróbowałem to ponownie i działa to doskonale dla mnie. –

+1

Szczerze mówiąc nie wiem dlaczego, ale dziś zaczęło działać. Przepraszam za to, ale nie mam pojęcia, co się stało. Nawet nie zmieniłem scenariusza! – Samaursa

Odpowiedz

3

Czy ostatnie polecenie przed wstrzymaniem wykonuje się pomyślnie? Umysł dzielący twój scenariusz - przynajmniej kilka ostatnich poleceń?

Alternatywnie, ponieważ wydaje się, że używasz Windows7, wypróbuj polecenie Timeout i zobacz, czy to działa.

+0

Cóż, jeśli 'pause' * zostanie wywołane *, zadziała. Użycie 'timeout' zamiast tego tego nie zmieni (poza tym, że wywołuje osobny program zamiast wbudowanej powłoki).Domyślam się, że istnieje 'goto: eof' lub' exit/b' gdzieś przed 'pause' (niezbyt często w plikach wsadowych z podprogramami - gdzie nie można po prostu dodać poleceń do końca, aby je wykonać). – Joey

+0

Co zrobić, jeśli ostatnie polecenie zgłasza wyjątek, co jest moim przypadkiem? –

94

Jeśli ostatnie polecenie nie powiedzie się, pauza nie będzie działać.

Możesz to naprawić, wstawiając "połączenie" za uruchomionym poleceniem (niezależnie od tego, jakie polecenie jest przed pauzą), wtedy pauza zadziała.

Tak na przykład miałem plik wsadowy phpunit który wyglądał tak:

phpunit tests/sometests.php 
pause 

Kiedy phpunit failed to właśnie opuszczany bez przerw. Zmiana tego na poprawiła się:

call phpunit tests/sometests.php 
pause 
+12

Dziękuję za to, pracował również dla mnie. Na marginesie, wydaje się, że nie musi się nie udać, jeśli polecenie wcześniej ma jakiś kod wyjścia (nawet w przypadku sukcesu), wydaje się, że zamknęło to okno. –

+3

'CALL' działało również. – JSmyth

+0

Dodanie 'call' nie miało dla mnie żadnego wpływu w wierszu polecenia systemu Windows 10 działającym jako administrator. Nie wiem, dlaczego polecenie 'pause' w moich plikach wsadowych (otwarte przez AutoHotKey) nagle przestało działać. Nie wiem, co się zmieniło. Pracowali od tygodni. – Ryan

1

Myślę, że wiem, gdzie jest problem, miałem ten sam problem. Więc jeśli robisz to w ten sposób, tworzysz nowy plik i umieszczasz w nim wszystkie informacje wsadowe i zapisujesz je jak zwykły tekst, a potem zmienisz nazwę rozszerzenia, to nie zadziała :). Musisz zapisać go w edytorze tekstu, a następnie wybrać "Plik wsadowy (.bat; .cmd; *. Nt)" na przykład Notepad ++, prawdopodobnie z powodu kodowania, więc zrób to tak jak i thnk to będzie w porządku. GL! :)

2

Miałem problemy nawet na echo ... zakładając, że było to spowodowane długim plikiem wsadowym ... Pauza była wykonywana, ale nie zatrzymywała się, było prawie tak, jakby naciskała klawisz po pauzie wykonany.

Wypróbowano sugerowane rozwiązania powyżej; żaden nie działał.

Tak tylko na przyszłość, o to co zrobiłem:

zasadzie tylko "pause> nul & & pause> nul"; działa za każdym razem.

@echo off 

CALL :ForcePause "Press any key to resume." 
ECHO. 
ECHO Hello World! 
ECHO. 
CALL :ForcePause "Press any key to exit." 

EXIT 

REM You can remove echo if you don't want to pass custom string for pause 
:ForcePause 
echo %~1 
pause > nul && pause > nul 
GOTO :EOF 
+0

'pause> nul' zdecydowanie działa, po prostu doesn ' t dać wiadomość: "naciśnij dowolny klawisz ..." –

+0

Oczywiście w idealnym świecie, ale jak wspomniałem, czasami nie jest to takie rozwiązanie. – Zunair

0

tylko dodatkiem do Tima odpowiedź, jeśli chcesz, aby zawsze wyświetlać okno można zapisać pliku .bat jak:

call phpunit tests/sometests.php 
cmd /k 
+0

Proszę zaksięguj to jako komentarz do odpowiedzi Tima. To nie jest pełna odpowiedź sama. – Marcel

+0

@Marcel obniżyłeś moją odpowiedź tylko dlatego, że zostawiam to jako odpowiedź zamiast komentarza? – Justin

+0

Tak, zrobiłem. To dobrze, ale to naprawdę powinien być komentarz. Jest krótki i jest bardzo ściśle związany z odpowiedzią. – Marcel

Powiązane problemy