Bunu yapan bir cmd betiği ve / veya iş için hazır bir komut satırı aracı olup olmadığını bilen var mı?
Bunu yapan bir cmd betiği ve / veya iş için hazır bir komut satırı aracı olup olmadığını bilen var mı?
Yanıtlar:
Aşağıdaki üç toplu iş dosyasını oluşturun. Main.bat, 1.bat ve 2.bat'ı başlattı
1.bat ve 2.bat, main.bat dosyasının kontrol ettiği geçici dosyaları yazar. 1.bat ve 2.bat çalışırken, main.bat işlemlerin hala devam ettiğini rapor eder. 1.bat veya 2.bat'ın açık penceresine girdiğinizde, geçici dosya silinir ve program kapanır. Bu, bu .bat dosyası için durmayı işlemeyi simüle eder. Bunu hem 1 hem de 2.bat için yaparsanız, main.bat size işlemlerin bu işlemler için tamamlandığını bildirir. Tamamladığınızda geçici dosyayı temizlediğiniz sürece 1.bat ve 2.bat istediğiniz bir şey yapabilirsiniz. Bu noktada main.bat, yapmasını istediğiniz her şeyi yapabilir.
1.bat
echo %time% > 1.tmp
pause
del 1.tmp
exit
2.bat
echo %time% > 2.tmp
pause
del 2.tmp
exit
main.bat
@echo off
start "1" 1.bat
start "2" 2.bat
@ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
@ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!
Bunu yapmanın tek yolu ayrı bir toplu iş dosyası başlatmaktır (bkz. start /?
bireysel görevi çalıştırmak ve tamamlandıktan sonra bir metin dosyası yazmak. Ardından, düzenli olarak metin dosyalarının yapılıp yapılmadığını kontrol edersiniz.
İşlemler standart girdi ya da çıktıya ihtiyaç duymazsa, yeterince basit. Komut satırından veya bir toplu iş dosyasında:
process1 | process2 | process3 | process4
Bu, dört işlemin tümünü aynı anda yürütecek ve hepsi çıkana kadar geri dönmeyecek. (Muhtemel istisna: Eğer bir işlem standart çıktıyı açıkça kapatırsa, işlem bitmiş gibi ele alınabilir. Fakat bu alışılmadık bir işlemdir.
Bu şekilde aynı anda kaç işlemi başlatabildiğinizden emin değilim. 10'a kadar denedim.
Powershell Start-Job cmdlet'ine bakabilirsiniz. Bunu yapmana izin vermeli. Daha İşte Powershell, Microsoft'un tercih ettiği bir kabuktur. Cmd komut dosyalarından çok daha güçlü ve zamanınızın yatırımına değer
Veya bunu kullanabilirsiniz: http://www.out-web.net/?p=167
Yaptım, işe yarıyor, ancak bazen bitmiş işlemin PID'sinin hemen yeni başlayan başka bir Windows işlemcisi tarafından yeniden kullanılması ve işleminizin sona ermesinin tespit edilmesini tehlikeli / hatalı hale getirmesi oluyor.
Ben de benzer bir iş arıyordum. Amaç paralel olarak çoklu komut çalıştırmak ve tüm paralel işlemlerin çıktısını (stdout & error;) çıkartmaktı. Ardından tüm paralel işlemlerin bitmesini ve başka bir komutu yürütmesini bekleyin. Aşağıda BAT dosyası için örnek kod verilmiştir, CMD'de yürütülebilir:
(
start "" /B cmd /c ping localhost -n 6 ^>nul
timeout /t 5 /nobreak
start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1
start "" /B cmd /c ping localhost -n 11 ^>nul
timeout /t 10 /nobreak
) | pause
Echo waited
timeout /t 12 /nobreak
İçindeki tüm ifadeler ()
önce yürütülür, tamamlanmalarını bekleyin, sonra son iki satır yürütülür. İle başlayan tüm komutlar start
aynı anda yürütülür.
Bu bağlantılar faydalıdır: https://stackoverflow.com/a/43762349/9689416 ve https://ss64.com/nt/start.html