Chạy các lệnh tệp bó Windows không đồng bộ


186

Nói, nếu tôi có

  • foo.exe
  • bar.exe
  • baz.exe

Làm cách nào để tôi chạy tất cả chúng từ một tệp bó không đồng bộ, tức là không đợi chương trình trước dừng lại?

Câu trả lời:


254

Sử dụng STARTlệnh để chạy từng chương trình sẽ giúp bạn có được những gì bạn cần:

START "title" [/D path] [options] "command" [parameters]

Mỗi STARTlệnh gọi chạy lệnh được đưa ra trong tham số của nó và trả về ngay lập tức, trừ khi được thực hiện bằng một /WAITcông tắc.

Điều đó áp dụng cho các ứng dụng dòng lệnh. Các ứng dụng không có dòng lệnh sẽ trả về ngay lập tức, vì vậy để chắc chắn, nếu bạn muốn chạy tất cả không đồng bộ, hãy sử dụng START.


Được rồi, cảm ơn. Tôi nên đọc từng mục một helpcách cẩn thận. :)
RichN

8
Tôi thực sự đã gặp rắc rối với điều này vào ngày khác. Tôi đã phải khởi chạy 30 cửa sổ explorer để kiểm tra hiệu năng. Không hoạt động và nó không đủ quan trọng để tôi xem xét nó .. bắt đầu duyệt xung quanh trong cửa sổ đó và vài giờ sau khi tôi đóng nó, một cái khác xuất hiện! Và tôi giống như cái quái gì, đóng nó lại .. một cái khác xuất hiện! Sau 4-5 cửa sổ và rất nhiều thứ **** tôi nhận thấy batchfile vẫn đang chạy!
Jonas B

3
Tự quảng cáo không biết xấu hổ: Tôi đã từng tạo một lô có thể hoạt động như một loại nhóm luồng, chỉ dành cho các quy trình: stackoverflow.com/questions/672719/ Lỗi
Joey

4
Nếu bạn cần cung cấp đối số hoặc nếu đường dẫn đến các lệnh chứa khoảng trắng, hãy nhớ thêm dấu ngoặc kép. Trong trường hợp này, bạn cũng cần cung cấp một tiêu đề cho cửa sổ bảng điều khiển mở: start "" "[đường dẫn đến lệnh]" [lệnh args]
Pierluigi

Có cách nào để nói với kỹ thuật này khi nó được thực hiện? Tôi đang khởi động ~ 30 bản sao FILA DESTA và tôi muốn chúng không đồng bộ, nhưng tôi cũng muốn có một số ý tưởng khi tất cả đã hoàn thành.
Doug

68

Kết hợp một vài câu trả lời trước, bạn có thể thử start /b cmd /c foo.exe.

Đối với một ví dụ tầm thường, nếu bạn muốn in ra các phiên bản java / groovy / grails / gradle, bạn có thể thực hiện việc này trong một tệp bó:

@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version

Nếu bạn có một cái gì đó giống như Process Explorer (Sysiternals), bạn sẽ thấy một vài cmd.exe con xử lý mỗi tiến trình java (theo các lệnh trên). Đầu ra sẽ in ra màn hình theo bất cứ thứ tự nào họ hoàn thành.

start /b :  Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application

cmd /c : Carries out the command specified by string and then terminates

13
nó ngăn lệnh bị lặp lại với bàn điều khiển. Trong các tập lệnh bó, đôi khi bạn sẽ thấy echo offở đầu, khi bạn thực thi tập lệnh, sẽ ngăn tất cả các lệnh được lặp lại với bàn điều khiển. Điều @tương tự nhưng chỉ cho lệnh đó. Vì vậy, đôi khi bạn sẽ thấy @echo off.
djKianoosh

36

Bạn có thể sử dụng lệnh start để sinh ra các tiến trình nền mà không cần khởi chạy các cửa sổ mới:

start /b foo.exe

Quá trình mới sẽ không bị gián đoạn với CTRL-C; bạn chỉ có thể giết nó bằng CTRL-BREAK (hoặc bằng cách đóng cửa sổ hoặc thông qua Trình quản lý tác vụ.)


5
Những BREAKbàn phím ngày nay ở đâu?
2023370

1
@ user2023370 Vẫn trên phím Tạm dừng . Hầu hết các máy tính xách tay thiếu một số phím nhất định hỗ trợ kết hợp phím ẩn .
GeroldBroser phục hồi Monica


23

Tạo một tệp bó với các dòng sau:

start foo.exe
start bar.exe
start baz.exe 

Lệnh start chạy lệnh của bạn trong một cửa sổ mới, vì vậy cả 3 lệnh sẽ chạy không đồng bộ.


17

Sử dụng lệnh START :

start [programPath]

Nếu đường dẫn đến chương trình chứa khoảng trắng, hãy nhớ thêm dấu ngoặc kép. Trong trường hợp này, bạn cũng cần cung cấp một tiêu đề cho cửa sổ giao diện điều khiển mở

start "[title]" "[program path]"

Nếu bạn cần cung cấp các đối số nối thêm chúng ở cuối (bên ngoài dấu ngoặc kép lệnh)

start "[title]" "[program path]" [list of command args]

Sử dụng tùy chọn / b để tránh mở cửa sổ bảng điều khiển mới (nhưng trong trường hợp đó, bạn không thể làm gián đoạn ứng dụng bằng CTRL-C


10

Có một tùy chọn thứ ba (và có khả năng dễ dàng hơn nhiều). Nếu bạn muốn tạo ra nhiều phiên bản của một chương trình, sử dụng bộ xử lý lệnh kiểu Unix như Xargs hoặc GNU Parallel có thể làm cho quá trình đó khá đơn giản.

Có một bản sao win32 Xargs được gọi là PPX2 , điều này khá đơn giản.

Ví dụ: nếu bạn muốn chuyển mã một thư mục tệp video, bạn có thể chạy lệnh:

dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"

Chọn cách này, dir /b *.mpglấy một danh sách các tệp .mpg trong thư mục hiện tại của tôi, |toán tử chuyển danh sách này thành ppx2, sau đó xây dựng một loạt các lệnh được thực thi song song; 4 tại một thời điểm, như được chỉ định ở đây bởi các -P 4nhà điều hành. Các -L 1nhà điều hành nói với ppx2 chỉ gửi một dòng thư của chúng tôi niêm yết để ffmpeg tại một thời điểm.

Sau đó, bạn chỉ cần viết dòng lệnh ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4") và {}được tự động thay thế cho từng dòng trong danh sách thư mục của bạn.

Nó không được áp dụng phổ biến cho mọi trường hợp, nhưng dễ dàng hơn nhiều so với việc sử dụng các cách giải quyết tệp bó chi tiết ở trên. Tất nhiên, nếu bạn không xử lý danh sách các tệp, bạn cũng có thể chuyển nội dung của tệp văn bản hoặc bất kỳ chương trình nào khác vào đầu vào của pxx2.


1
Cổng win32 xargs mới nhất hiện nay hoạt động tốt (dù sao đi kèm với git cho windows).
Peter M

Điều này là tuyệt vời ngoại trừ việc nó không xử lý các tệp có chứa các ký tự unicode. Bất kỳ kế hoạch để hỗ trợ các tập tin unicode? Cảm ơn.
Gotkhan Sever

@ GökhanSever Trước đây tôi đã từng giải quyết vấn đề này bằng cách sử dụng dạng "tên ngắn" của đường dẫn, trông giống như C: \ PROGRA ~ 1 \ WINDOW ~ 3 \ MYPROG ~ 1.EXE. Không đẹp, nhưng nó hoạt động.
moltenform

-1

Tôi không thể làm gì để làm việc. Cuối cùng, tôi chỉ sử dụng powershell để bắt đầu tập lệnh bat .. đôi khi thậm chí bắt đầu cmd / c không hoạt động không chắc tại sao .. Tôi thậm chí đã thử các công cụ như bắt đầu cmd / c notepad & exit

start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.