.bat dosyamı bir hatadan sonra nasıl devam ettirebilirim


30

Windows'da üç şeyi yapan bir .bat dosyam var

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Bazen cmd1 başarısız olabilir ve bu iyidir, devam etmek ve cmd2 ve cmd3'ü uygulamak istiyorum. Ama yarasam cmd1'de duruyor. Bundan nasıl kaçınabilirim?

Netlik için güncelleme - bunlar diğer .bat dosyaları değil, exe komutlarıdır. Umarım sadece bunu başarmak için .bat dosyalarından oluşan bir ağaç yapmam gerekmez.


Kullanarak komutu başlatabiliyor olmalısınız cmd /C.
Der Hochstapler

1
Neyin işe yaramadığını gösteren belirli bir kod örneği göstermeniz gerekir. Bir komut bir hatayla başarısız olursa, toplu iş dosyaları normalde otomatik olarak sonlandırılmaz. Toplu iş sözdizimi hatası varsa sonlandırır. Kodunuz bir exe hatasıyla çıkıyorsa, kodunuzda bu davranışa neden olan bir mantık olmalıdır.
dbenham

Yanıtlar:


18

Başka bir seçenek amperstand ( &) işlevini kullanmaktır

cmd1 & cmd2 & cmd3

Eğer bir double kullanırsanız, sadece önceki komut başarıyla tamamlanırsa devam eder ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Eğer bir double pipe ( ||) kullanıyorsanız, önceki hata kodu ile ( %ERRORLEVEL% NEQ 0) tamamlanırsa sadece bir sonraki komutu çalıştırır.

cmd1 || cmd2 || cmd3


Args geçerken bunu yapabilir miyim? Sadece denedim ve işe yaramadı.
ConfusedNoob

@ConfusedNoob Her zaman yapıyorum ... CHKDSKArgümanlar ile çalışan bir emir var . Yazarım check D: & check E: & check F:ve çalışıyor. BAT dosyasının içerdiği argümanlar /perf /f /r /b /scananahtarları içerir
Kanadalı Luke REINSTATE MONICA

2
İyi bir! bana birkaç denemenin nasıl uygulanacağına dair bir fikir verdi: cmd || cmd || ... başarılı olana kadar bir sonraki cmd'yi çalıştıracak
iTake 11:13

1
Bu, uzun komut dosyalarını okunamaz hale getirir, başka yolu yok mu?
Ocak

1
@CanadianLuke Peki, toplu iş windows toplu çerçevedir. Yüzlerce komutu etkileşimli olarak nasıl çalıştırıyorsunuz? Elektrik kabuğunda daha iyi bir yaklaşım var mı? Oraya taşınmak daha mı kötü?
Ocak

11

Cdds varsayarak diğer .bat dosyaları şöyle komutları istifler:

 call cmd1
 call cmd2
 call cmd3

10

Bu benim için çalıştı:

cmd.exe /c cmd1 arg1
cmd2
...

Bu cmd.exe, komutu Windows komut yorumlayıcısının yeni bir örneğinde çalıştırmak için kullanılır, bu nedenle başarısız bir komut toplu komut dosyasını kesmez. /cBayrak yakında komut tamamlandıktan yürütme gibi sonlandırmak için tercüman söyler.

cmd2ilk komut başarısız olsa bile çalıştırılır. Daha cmd /?fazla bilgi için Windows Komut İstemi'nden bakın .

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.