Menjalankan perintah file batch Windows secara tidak sinkron


187

Katakan, jika saya punya

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

Bagaimana cara menjalankan semuanya dari file batch secara serempak, yaitu tanpa menunggu program sebelumnya berhenti?

Jawaban:


254

Menggunakan STARTperintah untuk menjalankan setiap program akan memberi Anda apa yang Anda butuhkan:

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

Setiap STARTdoa menjalankan perintah yang diberikan dalam parameternya dan segera kembali, kecuali dijalankan dengan /WAITsakelar.

Itu berlaku untuk aplikasi baris perintah. Lagi pula, aplikasi tanpa baris perintah segera kembali, jadi untuk memastikan, jika Anda ingin menjalankan semua secara tidak sinkron, gunakan START.


Oke terima kasih. Seharusnya saya membaca setiap entri helpdengan seksama. :)
RichN

8
Saya sebenarnya mengalami masalah dengan ini beberapa hari yang lalu. Saya harus meluncurkan 30 windows explorer untuk tes kinerja. Tidak berfungsi dan itu tidak cukup penting bagi saya untuk memeriksanya .. mulai menjelajah di jendela itu dan beberapa jam kemudian ketika saya menutupnya, yang lain muncul! Dan aku seperti apa, menutupnya .. yang lain muncul! Setelah 4-5 windows dan banyak sekali **** saya perhatikan batchfile masih berjalan!
Jonas B

3
Shameless self-advertising: Saya pernah membuat batch yang dapat berfungsi sebagai semacam kumpulan utas, hanya untuk proses: stackoverflow.com/questions/672719/…
Joey

4
Jika Anda perlu memberikan argumen atau jika path ke perintah berisi spasi ingatlah untuk menambahkan kutipan. Dalam hal ini, Anda juga perlu memberikan judul untuk jendela konsol pembuka: mulai "" "[path to command]" [command args]
Pierluigi

Apakah ada cara untuk mengetahui dengan teknik ini ketika dilakukan? Saya memulai ~ 30 copy FILA DESTA dan saya ingin mereka menjadi async, tetapi saya juga ingin memiliki beberapa ide ketika semuanya selesai.
Doug

68

Menggabungkan beberapa jawaban sebelumnya, Anda bisa mencoba start /b cmd /c foo.exe.

Sebagai contoh sepele, jika Anda ingin mencetak versi java / groovy / grails / gradle, Anda bisa melakukan ini dalam file batch:

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

Jika Anda memiliki sesuatu seperti Process Explorer (Sysinternals), Anda akan melihat beberapa proses cmd.exe anak masing-masing dengan proses java (sesuai perintah di atas). Output akan mencetak ke layar dalam urutan apa pun yang mereka selesai.

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
itu mencegah perintah untuk digaungkan ke konsol. Dalam skrip batch, kadang-kadang Anda akan melihat echo offdi awal yang, ketika Anda mengeksekusi skrip, akan mencegah semua perintah untuk digaungkan ke konsol. The @mirip tapi hanya untuk satu perintah saja. Jadi, terkadang Anda akan melihat @echo off.
djKianoosh

36

Anda dapat menggunakan perintah mulai untuk menelurkan proses latar belakang tanpa meluncurkan jendela baru:

start /b foo.exe

Proses baru tidak akan terputus dengan CTRL-C; Anda dapat membunuhnya hanya dengan CTRL-BREAK (atau dengan menutup jendela, atau melalui Task Manager.)


5
Di mana BREAKpada keyboard hari ini?
user2023370

1
@ user2023370 Masih menggunakan tombol Jeda . Sebagian besar laptop yang tidak memiliki tombol tertentu mendukung kombinasi tombol tersembunyi .
Gerold Broser


23

Buat file batch dengan baris berikut:

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

The perintah mulai menjalankan perintah Anda di jendela baru, sehingga semua 3 perintah akan menjalankan asynchronously.


17

Gunakan perintah MULAI :

start [programPath]

Jika jalur ke program berisi spasi, ingatlah untuk menambahkan tanda kutip. Dalam hal ini Anda juga perlu memberikan judul untuk jendela konsol pembuka

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

Jika Anda perlu memberikan argumen, tambahkan di akhir (di luar tanda kutip perintah)

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

Gunakan opsi / b untuk menghindari membuka jendela konsol baru (tetapi dalam hal ini Anda tidak dapat mengganggu aplikasi menggunakan CTRL-C


10

Ada opsi ketiga (dan mungkin jauh lebih mudah). Jika Anda ingin memutar beberapa instance dari satu program, menggunakan prosesor perintah Unix-style seperti Xargs atau GNU Parallel dapat menjadikannya proses yang cukup mudah.

Ada klon win32 Xargs yang disebut PPX2 yang yang membuat ini cukup mudah.

Misalnya, jika Anda ingin transcode direktori file video, Anda bisa menjalankan perintah:

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

Memilih ini secara terpisah, dir /b *.mpgmengambil daftar file .mpg di direktori saya saat ini, |operator mem-pipe daftar ini ke ppx2, yang kemudian membangun serangkaian perintah untuk dieksekusi secara paralel; 4 sekaligus, sebagaimana ditentukan di sini oleh -P 4operator. Itu-L 1 Operator memberitahu ppx2 hanya mengirim satu baris dari daftar direktori kami untuk ffmpeg pada suatu waktu.

Setelah itu, Anda cukup menulis baris perintah ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"), dan{} secara otomatis diganti untuk setiap baris daftar direktori Anda.

Ini tidak berlaku secara universal untuk setiap kasus, tetapi jauh lebih mudah daripada menggunakan penyelesaian file batch yang dijelaskan di atas. Tentu saja, jika Anda tidak berurusan dengan daftar file, Anda juga dapat menyalurkan konten file teks atau program lain ke dalam input pxx2.


1
Port win32 xargs terbaru berfungsi dengan baik saat ini (yang disertakan dengan git untuk windows).
Peter M

Ini bagus kecuali gagal berurusan dengan file yang mengandung karakter unicode. Adakah rencana untuk mendukung file unicode? Terima kasih.
Gökhan Sever

@ GökhanSever Di masa lalu saya telah mengatasi masalah ini dengan menggunakan bentuk "nama pendek" dari jalur, yang terlihat seperti C: \ PROGRA ~ 1 \ WINDOW ~ 3 \ MYPROG ~ 1.EXE. Tidak cantik, tapi berhasil.
cair

-1

Saya tidak bisa mendapatkan apa pun untuk bekerja saya akhirnya hanya menggunakan PowerShell untuk memulai skrip kelelawar .. kadang-kadang bahkan mulai cmd / c tidak bekerja tidak yakin mengapa .. Saya bahkan mencoba hal-hal seperti mulai cmd / c notepad & keluar

start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.