Windows toplu iş dosyası komutlarını eşzamansız olarak çalıştırma


187

Söyle, eğer varsa

  • Foo.exe
  • bar.exe
  • baz.exe

Hepsini bir toplu iş dosyasından eşzamansız olarak, yani önceki programın durmasını beklemeden nasıl çalıştırabilirim?

Yanıtlar:


254

STARTHer programı çalıştırmak için komutu kullanmak size ihtiyacınız olanı sağlayacaktır:

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

Her STARTçağırma, parametresinde verilen komutu çalıştırır ve bir /WAITanahtarla yürütülmedikçe hemen geri döner .

Bu komut satırı uygulamaları için geçerlidir. Komut satırı olmayan uygulamalar yine de hemen geri döner, bu nedenle, hepsini senkronize olmayan bir şekilde çalıştırmak istiyorsanız, kullanın START.


Tamam teşekkürler. Her girişi helpdikkatlice okumalıydım . :)
RichN

8
Geçen gün bununla ilgili sorun yaşadım. Performans testi için 30 explorer penceresi açmam gerekiyordu. İşe yaramadı ve içine bakmak benim için yeterince önemli değildi .. o pencerede bunun yerine dolaşmaya başladı ve birkaç saat sonra kapattığımda başka bir tane çıktı! Ve ben de cehennem gibiydim, onu kapattım .. bir başkası daha ortaya çıktı! Sonra 4-5 pencere ve ne bir sürü **** Ben hala toplu iş fark!
Jonas B

3
Utanmaz kendi kendine reklam: Bir zamanlar sadece süreçler için bir tür iplik havuzu olarak işlev görebilen bir parti oluşturdum: stackoverflow.com/questions/672719/…
Joey

4
Bağımsız değişken sağlamanız gerekiyorsa veya komutlara giden yol boşluk içeriyorsa, tırnak eklemeyi unutmayın. Bu durumda, açılış konsolu penceresi için bir başlık sağlamanız gerekir: "" "[komut yolu]" [komut argümanları]
Pierluigi

Bu teknikle yapıldığında bunu söylemenin bir yolu var mı? ~ 30 kopya FILA DESTA'yı tekmeliyorum ve asenkron olmalarını istiyorum, ama hepsi bittiğinde de bir fikir sahibi olmak istiyorum.
Doug

68

Önceki cevaplardan birkaçını birleştirerek deneyebilirsiniz start /b cmd /c foo.exe.

Önemsiz bir örnek olarak, java / groovy / grails / gradle sürümlerini yazdırmak istiyorsanız, bunu bir toplu iş dosyasında yapabilirsiniz:

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

Process Explorer (Sysinternals) gibi bir şey varsa, her biri bir java işlemiyle (yukarıdaki komutlara göre) birkaç child cmd.exe işlemi görürsünüz. Çıktı, bitirdikleri sırayla ekrana yazdırılacaktır.

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
komutun konsola yansıtılmasını önler. Toplu komut dosyalarında, bazen echo offkomut dosyasını yürüttüğünüzde tüm komutların konsola yansıtılmasını önleyecek olan başında görürsünüz . @Benzer ama sadece bu tek komutla içindir. Yani, bazen göreceksin @echo off.
djKianoosh

36

Yeni pencereler başlatmadan arka plan işlemlerini oluşturmak için start komutunu kullanabilirsiniz:

start /b foo.exe

Yeni işlem CTRL-C ile kesintiye uğramayacak; yalnızca CTRL-BREAK ile (veya pencereyi kapatarak veya Görev Yöneticisi aracılığıyla) öldürebilirsiniz.


5
BREAKBugünlerde klavyelerde nerede ?
user2023370

1
@ user2023370 Hala Duraklat tuşunda. Belirli tuşlara sahip olmayan çoğu dizüstü bilgisayar gizli tuş kombinasyonlarını destekler .
Gerold Broser


23

Aşağıdaki satırlarla bir toplu iş dosyası oluşturun:

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

Start komutu 3 komutları uyumsuz aday olacağını, böylece yeni bir pencerede komutu çalıştırır.


17

BAŞLAT komutunu kullanın :

start [programPath]

Program yolu boşluk içeriyorsa tırnak eklemeyi unutmayın. Bu durumda, açılış konsolu penceresi için bir başlık sağlamanız gerekir

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

Bağımsız değişkenleri sağlamanız gerekiyorsa sonuna ekleyin (komut tırnak işaretleri dışında)

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

Yeni bir konsol penceresi açmamak için / b seçeneğini kullanın (ancak bu durumda CTRL-C kullanarak uygulamayı kesintiye uğratamazsınız)


10

Üçüncü (ve potansiyel olarak çok daha kolay) bir seçenek var. Tek bir programın birden fazla örneğini döndürmek istiyorsanız, Xargs veya GNU Parallel gibi Unix stili bir komut işlemcisi kullanmak bunu oldukça basit bir işlem haline getirebilir.

Adlı bir Win32 Xargs klon var PPX2 bu oldukça basit hale getirir.

Örneğin, bir video dosyası dizinini dönüştürmek istiyorsanız, şu komutu çalıştırabilirsiniz:

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

Bunu ayırdığınızda, dir /b *.mpggeçerli dizindeki .mpg dosyalarının bir listesini alır, |operatör bu listeyi ppx2'ye dönüştürür ve daha sonra paralel olarak yürütülecek bir dizi komut oluşturur; 4 burada, -P 4operatör tarafından belirtildiği gibi . -L 1Operatörü yalnızca bir seferde Ffmpeg için listeleme bizim dizinin bir satır göndermek için ppx2 söyler.

Bundan sonra, komut satırınızı ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4") yazmanız yeterlidir ve {}dizin listenizdeki her satır için otomatik olarak değiştirilir.

Her durum için evrensel olarak uygulanabilir değildir, ancak yukarıda ayrıntıları verilen toplu iş dosyası çözümlerini kullanmaktan çok daha kolaydır. Tabii ki, bir dosya listesi ile uğraşmıyorsanız, bir metin dosyasının veya başka bir programın içeriğini pxx2 girişine de ekleyebilirsiniz.


1
En son xargs win32 portu günümüzde iyi çalışıyor (zaten windows için git ile dahil olan).
Peter M

Unicode karakterler içeren dosyalarla uğraşmaması dışında bu harika. Unicode dosyalarını destekleme planlarınız var mı? Teşekkürler.
Gökhan Sever

@ GökhanSever Geçmişte C: \ PROGRA ~ 1 \ WINDOW ~ 3 \ MYPROG ~ 1.EXE gibi görünen yolun "kısa ad" formunu kullanarak bu sorunu çözdüm. Güzel değil, ama işe yarıyor.
moltenform

-1

Çalışmak için bir şey alamadım Sadece yarasa komut dosyalarını başlatmak için powershell kullanarak sona erdi .. bazen bile cmd / c başlatmak neden emin değilim .. Hatta başlangıç ​​cmd / c not defteri ve çıkış gibi şeyler denedim

start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.