Tôi có một tệp lô Windows khởi động các tệp lô khác. Làm cách nào để đợi tất cả các tệp lô khác hoàn thành trước khi thực hiện mọi thứ trong đợt đầu tiên? Tôi không thể sử dụng/chờ đợi vì tôi cần các lệnh khác để chạy song song.Đợi lệnh để kết thúc
Trả lời
Đề xuất của tôi là sử dụng lệnh CALL
. Một ví dụ từ Batch Files:
Batch1.bat niêm yết:
REM Batch1.bat
SET ABC=1
CALL BATCH2.BAT %ABC%
ECHO ABC = %ABC%
BATCH2.BAT %ABC%
ECHO ABC = %ABC%
nơi Batch2.bat niêm yết là:
REM Batch2.bat
SET ABC=%ABC%%1
EDIT: dựa trên phản hồi từ @Andriy M, ở đây là phiên bản được cải tiến cho hai lô:
Lô 1:
@ECHO OFF
REM Batch1.bat
SET ABC=1
CALL batch2.bat %ABC%
ECHO 1. ABC = %ABC%
CALL batch2.bat %ABC% REM test this line with CALL and without
ECHO 2. ABC = %ABC%
Mẻ 2:
@ECHO OFF
REM Batch2.bat
SET tmout=5
echo sleeping %tmout% seconds...
REM this introduces a timeout by using a nonexistent ip address
PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
echo done sleeping
SET ABC=%ABC%%1
Xem dòng trong batch1 nơi tôi đã viết những nhận xét thử nghiệm dòng này với CALL và không. Chạy lô đó hai lần, với dòng đó có CALL
và không có CALL
.
Kết quả của giao diện điều khiển mà khôngCALL
:
C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
Và bây giờ đầu ra từ console vớiCALL
:
C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
2. ABC = 1111
Xin lưu ý sự khác biệt: chúng tôi nhận được tiếng vang 2, q.e.d.
Đó là để nói, mà không GỌI nó chờ đợi cũng như với CALL, nhưng chỉ để… chấm dứt. :) –
@Andriy M: Dựa trên những gì tôi đã trải nghiệm cho đến nay, đó là ** không ** như vậy, mà không cần GỌI - thực hiện trả về ngay lập tức cho dòng tiếp theo, mà không cần chờ đợi được gọi là batch/lệnh để kết thúc (có lẽ bạn nên thử điều đó với các hoạt động dài). – woohoo
Điều đó thật kỳ lạ đến nỗi tôi phải xác minh kỳ vọng của mình bằng cách sử dụng các tập lệnh mẫu rất của bạn. Tôi chạy hàng loạt đầu tiên từ dấu nhắc lệnh trong Windows 7 SP1 của tôi và hai kịch bản đã làm việc cho tôi giống như tôi nghĩ họ sẽ, tức làviệc thực hiện chấm dứt sau khi 'batch2.bat' chấm dứt khi được gọi là lần thứ hai. Tức là, dòng cuối cùng của 'batch1.bat' không thực thi. Những gì bạn đã thử nghiệm chúng trên rằng bạn đang nói rằng không có CALL thực hiện trả về cho lô đầu tiên, và không phải chờ đợi quá? –
Bạn có thể sử dụng nhiều tệp cờ, mỗi tệp chạy mỗi tệp Hàng loạt. Ví dụ:
Đầu tiên batch file tạo Flagfile.1 khi nhập, và xóa nó trước khi kết thúc, và theo cùng một cách với phần còn lại của tập tin batch đồng thời (Flagfile.2, ...)
Các tập tin chính chỉ phải chờ tất cả các flagfiles biến mất. Ví dụ, trong tập tin chi tiết:
start Batch1
start Batch2
.....
:wait
if exist flagfile.* goto wait
Trong bất kỳ tập tin hàng loạt, ví dụ Batch1:
echo %time% > flagfile.1
echo Do my process...
del flagfile.1
exit
@ woohoo: Xin lỗi, tôi nghĩ có một sự hỗn loạn ở đây. Câu hỏi đặt ra là làm thế nào để chờ đợi cho tất cả các trẻ em song song hàng loạt để kết thúc trước khi tiếp tục một phụ huynh. Không có cách nào để giải quyết vấn đề này thông qua CALL, nhưng thông qua START. Khi người hỏi nói, anh ta không thể sử dụng/WAIT, đó là một tùy chọn của lệnh START. Giải pháp là triển khai một hệ thống semaphore cho phép tệp Batch của cha mẹ biết khi tất cả các con của nó kết thúc. Tôi đề xuất một hệ thống semaphore rất đơn giản dựa trên sự hiện diện của một tập tin, tuy nhiên, nên hoạt động hoàn hảo. Vì vậy, tại sao câu trả lời của tôi nhận được phiếu giảm giá? :-( – Aacini
+1, Tại sao bỏ phiếu xuống thực sự, đặc biệt vì đây là câu trả lời duy nhất thực sự giải quyết câu hỏi.Để có tệp chính tạo flagfile. Kịch bản chính có thể bắt đầu thử nghiệm trước khi các tiến trình con hoàn tất khởi tạo. – dbenham
TÌNH YÊU này! Trong VS, chúng tôi đã sử dụng 'CALL' trong mỗi sự kiện sau khi xây dựng của dự án dịch vụ để tải xuống tệp tham chiếu * .cs của mỗi người để lưu trữ trong một dự án khác có chứa tất cả tham chiếu assembly đơn giản. START/b/i' và thấy tôi có thể chạy tất cả cùng một lúc, cùng một cửa sổ, không ảnh hưởng lẫn nhau.Vì vậy, ngọt ngào, sau đó, tôi giống như heck tôi có thể sử dụng 'MSBuild' sau khi họ hoàn thành để xây dựng mà dự án dịch vụ để các dự án tham chiếu đến hội đồng của nó được cập nhật tự động. –
- 1. PHP shell_exec đợi tập lệnh kết thúc?
- 2. Đợi âm thanh kết thúc
- 3. Python Không đợi MATLAB kết thúc
- 4. Đợi phương thức jquery .html để kết thúc hiển thị
- 5. Node.js & Redis; Chờ đợi một vòng lặp để kết thúc
- 6. Dòng lệnh không đợi cho đến khi quá trình thực thi exe kết thúc
- 7. Đang đợi Bộ hẹn giờ kết thúc bằng Java
- 8. Đang đợi ASyncTask kết thúc hoặc biến được đặt
- 9. C# Đang đợi nhiều chủ đề kết thúc
- 10. Android: cách đợi AsyncTask kết thúc trong MainThread?
- 11. nohup trên windows, exec mà không cần đợi kết thúc
- 12. Kết thúc không mong đợi của luồng đầu vào ZLIB
- 13. Làm thế nào để kết thúc dòng lệnh git-svn?
- 14. Lệnh AWK để in cho đến khi kết thúc dòng
- 15. Rails 4 - lỗi cú pháp, tIDENTIFIER không mong đợi, mong đợi kết thúc đầu vào
- 16. Làm thế nào để chờ đợi cho một quá trình để kết thúc C++
- 17. Làm cách nào để jQuery đợi cho đến khi hiệu ứng kết thúc?
- 18. NodeJS đợi gọi lại để kết thúc sự kiện phát ra
- 19. làm cho chương trình chính chờ đợi cho các chủ đề để kết thúc
- 20. nodejs: chờ đợi cho các phương pháp khác để kết thúc trước khi thực hiện
- 21. Đợi tất cả các chủ đề trong một Executor để kết thúc?
- 22. cách đợi chuyển tiếp css để kết thúc trước khi áp dụng lớp tiếp theo
- 23. không đợi người dùng nhập vào tập lệnh mong đợi
- 24. Cách kết thúc lệnh nhiều dòng trong PowerShell
- 25. Kết thúc ứng dụng dòng lệnh Java đúng
- 26. ora-00.933: lệnh SQL không đúng cách kết thúc
- 27. ngày kết thúc đối tượng lệnh trong Grails
- 28. Lỗi cú pháp: kết thúc tệp bất ngờ (mong đợi "fi")
- 29. Quá trình không đồng bộ bắt đầu và đợi cho đến khi kết thúc
- 30. Cách đợi một hoạt ảnh kết thúc trong chế độ xemDidDisappear?
Bạn có thể đăng một số mã? Tôi không rõ vấn đề của bạn là gì. – steenhulthin
bạn có sử dụng 'call ...' để khởi chạy các gói khác không? – woohoo