bash “bekle” alternatifi, Windows toplu komut dosyası


1

Bash komutunda, geçerli kabuk tarafından başlatılan tüm arka plan işlemlerini beklemek için bir seçenek var. wait Komut.

Örneğin.

#!/bin/bash
{ sleep 5; echo "waking up after 5 seconds"; } &
{ sleep 1; echo "waking up after 1 second"; } &
wait
echo all jobs are done!

Windows toplu komut dosyasında nasıl yaparım? Arka planda birden fazla komut çalıştırmalı ve tüm işler bitene kadar beklemeliyim.


cmd'de (işlerini paralel yürütmek istiyorsan) bunu yapmanın basit bir yolu yok, ama Powershell'i kullanabiliyorsan ... wait-job ( technet.microsoft.com/en-us/library/Hh849735.aspx )
wmz

Powershell'e izin verilmiyor :(
Hemant

Sadece merak dışında, [PS'ye izin verilmiyor] ardındaki sebep nedir?
wmz

Yanıtlar:


3

Büyük olasılıkla WMIC ile yapılabilmesine rağmen, START komutunun paralel işlemeyi başlatmasını isteyeceksiniz. İlk argümanın alıntı yapılması durumunda bir pencere başlığı olarak değerlendirildiğini unutmayın. Bu yüzden ilk tartışmam boş bir dize. /B seçeneği komutu aynı pencerede çalıştırır. Her komut için yeni bir pencere istiyorsanız onu kaldırın.

Bir dizi paralel işlemin bitmesini beklemek için basit bir yerel toplu komut veya seçenek yoktur.

Kullanılmayan bir dosya tanıtıcısını her işlem için bir dosyaya yönlendirmeyi ve böylece özel bir kilit oluşturmayı seviyorum. Yeniden yönlendirmeyi deneyerek bir işlemin hala devam edip etmediğini tespit edebilirim. (CALL ) (etkin bir null op) aynı kilit dosyasına. Yönlendirme başarısız olursa, işlem hala çalışıyor demektir. Başarı, sürecin sona erdiğini gösterir.

Test, bir sorgulama döngüsünde kilit dosyalarının her birine karşı yapılmalıdır. Bir gecikme eklemek, yoklama döngüsünün kaynakları kötüye kullanmasını önlemek için iyi bir fikirdir.

@echo off
set "lock=%temp%\%~nx0.lock"
start "" /b "timeout" 5 9>"%lock%.1"
start "" /b "timeout" 8 9>"%lock%.2"
:wait
timeout 1 /nobreak >nul
2>nul (for %%F in ("%lock%.*") do 9>"%%F" (call ) && del "%%F" || goto :wait)
echo OK

Çalıştırılacak çok sayıda paralel işleminiz varsa ve eşzamanlı işlemlerin sayısını sınırlamak istiyorsanız, o zaman ilginizi çekebilir. https://stackoverflow.com/a/11715437/1012053

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.