Bất cứ ai cũng biết nếu có kịch bản cmd thực hiện điều đó và / hoặc một công cụ dòng lệnh đã sẵn sàng cho công việc?
Bất cứ ai cũng biết nếu có kịch bản cmd thực hiện điều đó và / hoặc một công cụ dòng lệnh đã sẵn sàng cho công việc?
Câu trả lời:
Tạo ba tệp bó bên dưới. Main.bat ra mắt 1.bat và 2.bat
1.bat và 2.bat ghi ra các tệp tạm thời để kiểm tra main.bat. Trong khi 1.bat và 2.bat đang hoạt động, main.bat báo cáo lại rằng quá trình xử lý vẫn đang diễn ra. Khi bạn nhấn enter trên cửa sổ mở 1.bat hoặc 2.bat, tệp tạm thời sẽ bị xóa và chương trình thoát. Điều này mô phỏng dừng xử lý cho tập tin .bat đó. Nếu bạn làm điều này cho cả 1 và 2.bat, main.bat báo cáo với bạn rằng quá trình xử lý đã hoàn tất cho các quy trình này. Bạn có thể thực hiện 1.bat và 2.bat làm bất cứ điều gì bạn muốn, miễn là bạn xóa tệp tạm thời khi bạn kết thúc. Tại thời điểm này, main.bat có thể làm bất cứ điều gì bạn muốn.
1.bat
echo %time% > 1.tmp
pause
del 1.tmp
exit
2.bat
echo %time% > 2.tmp
pause
del 2.tmp
exit
chính
@echo off
start "1" 1.bat
start "2" 2.bat
@ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
@ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!
Đủ đơn giản, miễn là các quy trình không cần đầu vào hoặc đầu ra tiêu chuẩn. Từ dòng lệnh hoặc trong một tệp bó:
process1 | process2 | process3 | process4
Điều này sẽ chạy tất cả bốn quy trình cùng một lúc và sẽ không quay trở lại cho đến khi tất cả chúng đã thoát. (Ngoại lệ có thể xảy ra: nếu một quy trình đóng rõ ràng đầu ra tiêu chuẩn, nó có thể được xử lý như thể nó đã thoát. Nhưng đó là điều bất thường, rất ít quy trình làm điều đó.)
Tôi không chắc chắn chính xác có bao nhiêu quá trình bạn có thể khởi chạy đồng thời theo cách này. Tôi đã thử tới mười.
Cách duy nhất để làm điều này là bắt đầu các tệp bó riêng biệt (xem start /?
) chạy tác vụ riêng lẻ và viết tệp văn bản sau khi hoàn thành. Sau đó, bạn định kỳ kiểm tra xem các tệp văn bản đã được thực hiện.
Bạn có thể nhìn vào lệnh ghép ngắn Powershell Start-Job. Nó sẽ cho phép bạn làm điều này. More đây Powershell là vỏ của sự lựa chọn của Microsoft. Nó mạnh mẽ hơn nhiều so với các tập lệnh cmd và rất quan tâm đến việc đầu tư thời gian của bạn
Hoặc bạn có thể sử dụng cái này: http://www.out-web.net/?p=167
Tôi đã làm điều đó, nó hoạt động, tuy nhiên đôi khi điều đó xảy ra là PID của quá trình hoàn thành ngay lập tức được sử dụng lại bởi một tiến trình Windows khác vừa mới bắt đầu và nó làm cho việc phát hiện kết thúc quá trình của bạn trở nên nguy hiểm / sai lầm.
Tôi cũng đang tìm kiếm nhiệm vụ tương tự. Mục tiêu là chạy nhiều lệnh song song và trích xuất đầu ra (stdout & error) của tất cả các quy trình song song. Sau đó chờ cho tất cả các quá trình song song kết thúc và thực hiện một lệnh khác. Dưới đây là mã mẫu cho tệp BAT, có thể được thực thi trong CMD:
(
start "" /B cmd /c ping localhost -n 6 ^>nul
timeout /t 5 /nobreak
start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1
start "" /B cmd /c ping localhost -n 11 ^>nul
timeout /t 10 /nobreak
) | pause
Echo waited
timeout /t 12 /nobreak
Tất cả các câu lệnh bên trong ()
được thực thi trước, đợi chúng hoàn thành, sau đó hai dòng cuối cùng được thực thi. Tất cả các lệnh bắt đầu start
được thực hiện đồng thời.
Các liên kết này rất hữu ích: /programming//a/43762349/9689416 và https://ss64.com/nt/start.html