2011-10-31 20 views
6

Kiedy piszę plik wsadowy uruchamiany automatycznie, w jaki sposób mogę go zapisać, aby po uruchomieniu pliku wsadowego mógł wstrzymać się na kilka sekund pomiędzy poleceniami?Polecenie uśpienia w pliku wsadowym?

Kontekst:

psexec \\server -u user -p pass cmd 
[there needs to be a pause here for psexec to establish a connection] 
dir /s >output.txt \\server\shared 

* Uwaga: powód uruchomić po stronie serwera polecenia dir za pomocą psexec a nie lokalnie, ponieważ jest o wiele szybsze uruchamianie reż na lokalnym komputerze niż na odległość, a czas jest esencja.

Kiedy robię to ręcznie, jest to oczywiście łatwe, po prostu czekam. Jednak uruchamianie pliku wsadowego powoduje, że wszystkie polecenia są uruchamiane z prędkością bliską prędkości natychmiast obok siebie, niezależnie od statusu zakończenia ostatniego polecenia. Jak wstawić pauzę?

+0

Możliwy duplikat [Spanie w pliku wsadowym] (http://stackoverflow.com/questions/166044/sleeping-in-a-batch-file) –

+1

http://stackoverflow.com/a/7958678/206730 jest bardziej przydatny, może oznaczać jako odpowiedź – Kiquenet

Odpowiedz

2

myślę, że informacje tutaj: http://malektips.com/xp_dos_0002.html by wyjaśnić to lepiej niż I.

Jest jeszcze sprawa obsługi błędów choć (co jeśli zdalny komputer nie jest aż?). cmd.exe jest dość bezużyteczny do wykonywania jakichkolwiek działań zdalnych w przeważającej części, użycie powershell umożliwiłoby znacznie więcej.

EDIT ::

W rzeczywistości, można wykonać program przechowywane lokalnie z PsExec (pobiera skopiowane i wykonywane lokalnie po stronie serwera) - by przy użyciu tego być bardziej realną alternatywą?

Nie wiedząc, jakie polecenia zamierzasz uruchomić, ciężko jest zrobić to znacznie dalej.

EDIT (2) ::

Jeśli to tylko jedno polecenie używasz, wystarczy zapisać go w specjalnym pliku, jak 'remote_dir_listing.cmd', a następnie użyć psexec z:

psexec \\server -u <user> -p <pass> -c -f remote_dir_listing.cmd 

Wymusi to skopiowanie pliku lokalnego na stronę zdalną za każdym razem, gdy go uruchomisz (w przypadku, gdy chcesz go rozwinąć). W ten sposób omijasz potrzebę zatrzymania w ogóle - tylko wtedy, gdy psexec ma otwarte rury, uruchomi się, a po jej zakończeniu zamknie się w ciszy.

+0

Fantastyczne! Dzięki! – jayjyli

7

Jest timeout komenda w nowszej wersji systemu Windows:

timeout /T 10 
24

W Windows   Vista/Windows   7 można użyć polecenia timeout:

timeout /T [delay in seconds] /NOBREAK > NUL 

W poprzednich wersjach systemu Windows można użyć polecenia ping (polecenie ping ma wartość 1000   ms opóźnienia między każdej iteracji):

ping -n [delay in seconds + 1] 127.0.0.1 > NUL 

niektórych wersjach systemu Windows (jak Windows Server 2003) ma sen.exe wykonywalny:

sleep [delay in seconds] 

Uwaga: Windows Resource kit for 2003 zawiera Sleep.exe komenda.

Jeśli nie znasz wersji systemu Windows, po prostu użyj haka ping, ponieważ będzie on dostępny.

+1

Powiedziałbym, że większość osób, które przyjdą tutaj z google, uzna tę odpowiedź (nie za akceptowaną) za najbardziej użyteczną. –

+1

Ponieważ protokół TCP/IP jest teraz wszechobecny, używanie * ping * zwykle działa, ale tylko wtedy, gdy używany jest protokół TCP/IP (komputer kliencki systemu Windows może zamiast tego używać protokołu NetBEUI lub IPX/SPX). Ref: http://www.techrepublic.com/article/get-it-done-the-complete-windows-2000-client-tcp-ip-configuration-guide/ –

Powiązane problemy