İç içe toplu iş dosyalarını
call komutunu kullanarak bir üst dosyadan nasıl arayacağımı biliyorum, çünkü bu konuda çok fazla kaynak var:
Ancak, anlamıyorum why başkasından başka bir toplu iş dosyasını çağırmak üst öğeyi sonlandırıyor.
Daha az soyut bir örnek için, ayrı toplu iş dosyalarını "birbirine bağlayan" bir toplu iş dosyasına sahip olduğumu ve I yanlış bir şekilde her satıra
call hazırlamadığını varsayalım:
foo.bat bar.bat
Bu sadece foo.bat dosyasını çalıştırır ve çıkar. Her iki komutu da doğru şekilde yürütmek için, her ifadeden önce bir çağrı hazırlamam gerekir:
call foo.bat call bar.bat
İlk işlevsellik neden hala var? Neden değişmedi?
call'nin 1980'lerin sonlarında piyasaya sürülen MS-DOS 3.3'te tanıtıldığını fark ettim, bu işlev hala ters uyumluluk için burada mı?
Herhangi bir (pratik) kullanımı düşünemiyorum, ama belki de "yeni" programlama tekniklerine alışkınım.
DOS, basit metin işlemeyi kullandı ( 20 dosya tanıtıcılarına izin vermek için config.sys'de
FILES=20 gibi şeyler olduğunda), bu nedenle dosyayı açtı, bir sonraki satırı oku, dosyayı kapattı, sonra da sadece oku. Dosya başka bir yerde çağrılırsa, işlem bu dosyayla devam etti, böylece bir toplu iş dosyası için yalnızca 1 dosya tanıtıcısı gerekli olacaktır.
Microsoft,
call komutunu girinceye kadar, orijinal dosyaya geri dönmenin bir yolu yoktu (önceki dosyanın adını parametre olarak vermek gibi hileler kullanmak ve orijinal toplu iş dosyasının kubbesi olduğunu bildirmek için geçici dosyaları kullanmak gibi) işleniyor ve daha sonra
GOTO dosyasının bir sonraki parçası olabilir.
Sean Cheshire'ın yazdığı gibi geriye dönük uyumluluk için gereklidir.
Ancak bir toplu iş dosyasını
CALL kullanmadan bir toplu iş dosyasından başlatmak üst öğeyi sonlandırmaz!
Bu şekilde görünüyor, çünkü ebeveyn normalde ikinci parti çıktıktan sonra daha fazla çalıştırılmayacak.
Fakat ikinci.bat'a başlamadan önce bir çağrı kullanmak ilk partinin sonlandırılmadığını gösterecektir.
parent.bat
echo parent.bat call :myLabel echo back in parent.bat main exit /b :myLabel second.bat & echo back in parent.bat exit /b
second.bat
echo second.bat exit /b
Burada cms.exe başka bir hata/özelliği önlemek için
secpond.bat & echo back ... kullanın.
Eğer ekstralar olmadan
second.bat kullanırsanız,
second.batVE/
:myLabel içindeki
second.bat etiketine atlar!
Call temel olarak "git, bu diğer toplu dosyayı çalıştır ve sonra buraya geri dön ve devam et" der. DOS 3.3'ten bu yana oradaydı ve şimdi çıkarıldıysa geriye dönük uyumlulukları kıracak (bu yüzden insanlar hala toplu komut dosyaları kullanıyorlardı).
:link konumlarına dallanmak için de kullanılabilir.
Kullanım ve sözdizimi hakkında bilgi almak için (diğerleri için gelecekteki referanslar için) bunu görebilirsiniz MS TechNet link
Yeni bir işlevselliğe ihtiyacınız varsa, bunun yerine CMD komut dosyalarını veya PowerShell komut dosyalarını kullanın.