Tôi muốn tập lệnh bó của tôi chạy tập lệnh bó, không kết thúc, sau đó chạy thêm một số tập lệnh bó, kết thúc và sau đó đóng tập lệnh bó đầu tiên.
Vấn đề là, tập lệnh bó đầu tiên tôi bắt đầu cần thiết lập kết nối trước khi tôi có thể bắt đầu chạy các tập lệnh khác và để xác định khi nào xong, tôi cần xem đầu ra của tập lệnh đầu tiên tôi bắt đầu cho chuỗi kết nối đó là thành lập.
Trong mã giả,
start first script
wait for first script to output specific string
while the first script remains running:
run several other scripts
close the first script
Chuỗi này sẽ chỉ xuất hiện sau khi một số dòng trước đó đã được in. Cả số lượng dòng và thời gian này có thể khác nhau. Các chuỗi không được xuất ra cùng một lúc. Tôi không thể sửa đổi tập lệnh này.
Kết quả mong muốn là thế này:
C:\>first_batch_script.bat
Some line
Doing a thing
Winning the points
The Sims did this joke better
Connection established
certain string
C:\>other_batch_script.bat
other_batch_script is done!
C:\>another_batch_script.bat
another_batch_script is done!
C:\>REM kill first_batch_script.bat
Đây là mã tôi đang thử:
FOR /f "tokens=* delims=" %%L IN ('first_batch_script.bat ^| find "certain string"') DO echo %%L
call other_batch_script.bat
call another_base_script.bat
REM kill first_batch_script.bat
Sử dụng FOR /f
có vẻ hứa hẹn, nhưng khi tôi chạy này, tập lệnh bó chạy khá chậm và sau đó dường như bị treo. Trong mọi trường hợp, ngay cả khi nó chạy qua, tôi không thấy một cách hay để thoát ra khỏi vòng lặp và tiếp tục thực thi mã của mình
Sử dụng START /WAIT
không giúp ích vì tập lệnh đầu tiên tôi bắt đầu không (và không nên) chấm dứt. Sử dụng bất kỳ loại phương pháp thời gian nào sẽ không hoạt động vì có thể mất nhiều thời gian khác nhau để kết nối được thiết lập.
Vì vậy, dài và ngắn: