Windows cmd komut dosyasından birden çok komut yürütme


136

Dizi içinde birkaç görev gerçekleştirmek için bir Windows cmd komut dosyası yazmaya çalışıyorum. Ancak, komut dosyasındaki ilk komuttan sonra her zaman durur.

Sonrasında durduğu komut bir maven derlemesidir (bunun doğru olup olmadığından emin değildir).

Her görevi sırayla yürütmesini ve yürütmesini nasıl sağlarım?

Herhangi bir yazılım yüklemek veya kayıt defteri vb. Yapılandırmak tamamen söz konusu değil - korkarım bir vanilya Windows XP kurulumu üzerinde çalışmak zorunda.

İdeal olarak, komutlardan herhangi biri başarısız olursa komut dosyasının iptal etmesini istiyorum, ancak bu bir "olması güzel", gerekli değil.

Teşekkürler.

Yanıtlar:


139

Başka bir .bat dosyası aradığınızda, çağrının önünde "çağrı" yapmanız gerektiğini düşünüyorum:

call otherCommand.bat

1
Merhaba, orijinal komut dosyasında diğer .cmd dosyalarını çağırmıyordum, ancak her birini sırayla çalıştırabilmem için ayrı dosyalara ayırdım. Yani, her komutun önüne çağrı koymak hile yapmış gibi görünüyor, teşekkürler!
Darren Greaves

5
Nitekim, Windows üzerinde, mvnkendi başına bir .bat dosyasıdır, bu nedenle callbunun için kullanmanız gerekir call mvn install; normalde fazladan bir cmd dosyası oluşturmanız gerekmez.
jfpoilpret

2
Toplu iş dosyalarında noktalı virgüllere ihtiyacınız olmadığını unutmayın. Ve çağrı kullanmanızın nedeni, mvn'nin kendisinin bir toplu iş dosyası olması ve toplu iş dosyalarının birbirlerini çağrı ile çağırması gerektiğidir, aksi takdirde kontrol arayana geri dönmez.
Pushkar

@Gulzar Nazim - Tüm komutları farklı toplu iş dosyalarında tutmak istemediğim için if-else deyimiyle tek bir toplu iş dosyasına koyabilir miyim biliyor musunuz?
Ng2-Fun

1
npmGüncellemeler ve protractortestlerle benzer bir şey yapmaya çalışıyordum . Ben fark edene kadar bana uygulanan bu cevabı düşünmüyordu npmve protractorvardır .cmdWindows üzerinde dosyaları.
Joshden

45

İkinci komutu yalnızca ilk başarılı olduğunda yürütmek için komutlar arasındaki && sembolünü kullanabilirsiniz. Burada daha fazla bilgi http://commandwindows.com/command1.htm


Teşekkürler, yukarıdaki kabul edilen cevap ile birlikte bunu deneyeceğim.
Darren Greaves

Eğer maven derlemesi başarısız olursa ikinci betiğin yürütülmesini durduracak mı?
Varun Achar

Bu bağlantı koptu: "Arka uç sunucusu zamanında yanıt vermedi. Uygulama sunucusu çok meşgul ve istekleri zamanında işleyemiyor."
kevinji

1
@TheM Windows, GUI tabanlı ve komut tabanlı uygulamalar arasında ayrım yapar (EXE dosyasının başlangıcına yakın bir bayrak vardır). GUI tabanlı bir uygulamayı komut satırından başlatırsanız, komut satırından tamamen ayrıldığından, her zaman hemen bitiyor gibi görünür. Bir GUI programından (Explorer gibi) komut tabanlı bir program başlatırsanız, her zaman yeni bir komut satırı gösterilir. POSIX sistemleri böyle bir ayrım yapmaz, bu nedenle davranış daha tutarlıdır.
coderforlife

2
@TheM Bunu kullanmak için kullanabilirsinizstart /B /WAIT calc
coderforlife

25

İlk komutun neden durduğundan emin değilim. Paralel hale getirebilirseniz, şöyle bir şey deneyebilirsiniz

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

7
Komutunuz yürütüldükten sonra kabuğun açık kalmasını istiyorsanız /Kyerine kullanın /C.
JellicleCat

Kullanmanıza gerek yok cmd.exeve startsadece start x.bat1yapacağız.
user66001

23

Ben sadece maven test komut dosyalarını çalıştırmak için bir toplu komut dosyası oluşturma tam olarak aynı (ish) görev yapıyorum. Sorun, mvn clean install ile maven komut dosyalarını çağırmak ... kendisi bir komut dosyasıdır ve bu nedenle çağrı mvn clean install ile yapılması gerekir.

Çalışacak kod

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

Daha ziyade çağrı kullanımını not edin. Bu, toplu iş dosyasında ardışık maven komut dosyalarının kullanılmasına izin verecektir.


5

Çift ve işareti kullanmak ikinci komutu çalıştırır, ancak ilk komut başarılı olursa:

cd Desktop/project-directory && atom .

Nerede, yalnızca bir ve işareti kullanmak, ilk başarısız olsa bile her iki komutu da çalıştırmayı dener:

cd Desktop/project-directory & atom .

1

Windows'ta çalışıyorsanız aşağıdaki komutu kullanabilirsiniz.

Sürücü:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

1

Sorunuzun doğrudan cevabını bilmiyorum, ancak bu senaryoların çoğunu yaparsanız, perl gibi daha güçlü bir dil öğrenmeye değer olabilir. Windows için ücretsiz uygulamalar mevcuttur (örn. Activestate, cygwin). Kendi görevlerim için ilk çabaya değer buldum.

Düzenle:

@Ferruccio tarafından önerildiği gibi, fazladan yazılım yükleyemiyorsanız, vbscript ve / veya javascript'i göz önünde bulundurun. Windows komut dosyası barındırıcısında yerleşik olarak bulunurlar.


Teşekkürler, ancak herhangi bir yazılım yükleyemiyorum. Keşke berbat Windows komut dosyası dilinden daha güçlü bir şeye erişebilseydim. :-(
Darren Greaves

6
Her zaman vbscript veya javascript kullanabilirsiniz. Windows komut dosyası barındırıcısında yerleşik olarak bulunurlar.
Ferruccio

0

Toplu iş dosyalarında noktalı virgüllere ihtiyacınız olmadığını unutmayın. Ve çağrıyı kullanmanızın nedeni, mvn'nin kendisinin bir toplu iş dosyası olması ve toplu iş dosyalarının çağrı ile birbirlerini çağırması gerektiğidir, aksi takdirde kontrol arayan kişiye geri dönmez.

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.