2011-10-31 49 views
6

Khi tôi đang viết một tập tin batch để chạy tự động, làm thế nào để viết nó để khi tập tin batch được chạy, nó có thể tạm dừng trong vài giây giữa các lệnh?Lệnh ngủ trong tập tin batch?

Bối cảnh:

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 

* Lưu ý: lý do tôi chạy lệnh dir server-side sử dụng psexec và không cục bộ là bởi vì nó nhanh hơn nhiều để chạy dir trên máy tính cục bộ hơn từ xa, và thời gian là điều bản chất.

Khi tôi làm điều này bằng tay, điều đó rõ ràng là dễ dàng, tôi chỉ chờ đợi. Nhưng chạy một tập tin batch làm cho nó chạy tất cả các lệnh ở gần tốc độ ngay cạnh nhau, bất kể tình trạng hoàn thành của lệnh cuối cùng. Làm cách nào để tạm dừng?

+0

Bản sao có thể có của [Ngủ trong tập tin thực thi] (http://stackoverflow.com/questions/166044/sleeping-in-a-batch-file) –

+1

http://stackoverflow.com/a/7958678/206730 hữu ích hơn, có thể được đánh dấu là câu trả lời – Kiquenet

Trả lời

2

Tôi nghĩ rằng thông tin ở đây: http://malektips.com/xp_dos_0002.html sẽ giải thích nó tốt hơn so với I.

Vẫn còn trường hợp xử lý lỗi mặc dù (nếu máy tính từ xa không phải là lên?). cmd.exe là khá vô ích cho việc thực hiện bất kỳ hoạt động từ xa cho hầu hết các phần, bằng cách sử dụng PowerShell sẽ cho phép nhiều hơn nữa.

EDIT ::

Trong thực tế, bạn có thể thực hiện một chương trình lưu trữ cục bộ với psexec (nó được sao chép qua và thực hiện tại địa phương server-side) - sẽ sử dụng đó là một lựa chọn khả thi hơn?

Nếu không biết bạn đang có ý định chạy lệnh nào thì khó có thể thực hiện được nhiều hơn nữa.

EDIT (2) ::

Nếu nó chỉ là một trong những lệnh bạn đang chạy, bạn chỉ cần lưu nó trong một tập tin chuyên dụng, như 'remote_dir_listing.cmd', và sau đó sử dụng psexec với:

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

Điều này sẽ buộc một bản sao của tệp cục bộ vào phía bên ngoài mỗi khi bạn thực hiện nó (trong trường hợp bạn muốn mở rộng nó). Bằng cách này, bạn bỏ qua nhu cầu tạm dừng ở tất cả - chỉ khi psexec có các đường ống mở thì nó sẽ chạy, và sau khi nó hoàn thành, nó tự đóng kín.

+0

Tuyệt vời! Cảm ơn! – jayjyli

7

timeout lệnh trong phiên bản mới hơn của Windows:

timeout /T 10 
24

Trên Windows   Vista/Windows   7 bạn có thể sử dụng lệnh timeout:

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

Trên các phiên bản trước của Windows, bạn có thể sử dụng lệnh ping (lệnh ping có 1000   ms của sự chậm trễ giữa mỗi lần lặp):

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

Một số phiên bản của Windows (như Windows Server 2003) có giấc ngủ.exe thực thi:

sleep [delay in seconds] 

Lưu ý: Windows Resource kit for 2003 chứa sleep.exe lệnh.

Nếu bạn không biết phiên bản Windows, chỉ cần sử dụng ping ping vì nó sẽ khả dụng.

+1

Tôi sẽ nói rằng hầu hết những người đến đây từ google sẽ tìm thấy câu trả lời này (không phải là một trong những chấp nhận) hữu ích nhất. –

+1

Vì TCP/IP hiện đang phổ biến, sử dụng * ping * thường sẽ hoạt động, nhưng chỉ khi TCP/IP được sử dụng (máy khách Windows có thể sử dụng NetBEUI hoặc IPX/SPX). Tham khảo: http://www.techrepublic.com/article/get-it-done-the-complete-windows-2000-client-tcp-ip-configuration-guide/ –

Các vấn đề liên quan