Bagaimana perintah MULAI dengan opsi WAIT
START /wait notepad.exe
START /wait notepad.exe
... berbeda dengan menggunakan perintah CALL?
CALL notepad.exe
CALL notepad.exe
Apakah ada situasi di mana seseorang mungkin berperilaku berbeda sehingga yang lain bergantung pada apa yang sedang dieksekusi?
windows
batch-file
Chad
sumber
sumber
Jawaban:
Untuk file exe , saya kira perbedaannya hampir tidak penting.
Tetapi untuk memulai exe Anda bahkan tidak perlu
CALL
.Ketika memulai batch lain, ini merupakan perbedaan besar,
seperti yang
CALL
akan memulainya di jendela yang sama dan batch yang dipanggil memiliki akses ke konteks variabel yang sama.Jadi itu juga bisa mengubah variabel yang mempengaruhi penelepon.
START
akan membuat cmd.exe baru untuk batch yang dipanggil dan tanpa / b itu akan membuka jendela baru.Karena ini adalah konteks baru, variabel tidak dapat dibagi.
Perbedaan
Menggunakan
start /wait <prog>
- Perubahan variabel lingkungan hilang ketika
<prog>
ujungnya- Pemanggil menunggu sampai
<prog>
selesaiMenggunakan
call <prog>
- Untuk exe itu dapat dinonaktifkan, karena itu sama dengan hanya memulai
<prog>
- Untuk exe-prog batch penelepon menunggu atau memulai exe asynchronous, tetapi perilaku tergantung pada exe itu sendiri.
- Untuk file batch , batch pemanggil berlanjut, ketika dipanggil
<batch-file>
selesai, TANPA panggilan kontrol tidak akan kembali ke batch pemanggilTambahan:
Menggunakan
CALL
dapat mengubah parameter (untuk file batch dan exe), tetapi hanya ketika mereka mengandung tanda tanda atau persen.Akan diperluas ke (dari dalam file batch)
sumber
start /wait /b cmd /c <batchfile.bat>
karena file batch dijalankan satu demi satu di jendela perintah yang samacall batchfile.bat
Saya pikir mereka harus melakukan secara umum sama, tetapi ada beberapa perbedaan.
START
umumnya digunakan untuk memulai aplikasi atau untuk memulai aplikasi default untuk jenis file yang diberikan. Dengan begitu jika AndaSTART http://mywebsite.com
tidak melakukannyaSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
akan memulai Microsoft Word dan membuka myworddoc.docx.CALL myworddoc.docx
melakukan hal yang sama ... namunSTART
menyediakan lebih banyak opsi untuk keadaan jendela dan hal-hal semacam itu. Ini juga memungkinkan prioritas proses dan afinitas diatur.Singkatnya, mengingat opsi tambahan yang disediakan oleh awal, itu harus menjadi alat pilihan Anda.
sumber
Ada perbedaan yang berguna antara
call
danstart /wait
ketika meneleponregsvr32.exe /s
misalnya, juga direferensikan oleh Gary dalam jawabannya untuk bagaimana-cara-saya-mendapatkan-aplikasi-keluar-kode-dari-a-windows-command-lineakan selalu mengembalikan 0 tetapi
akan mengembalikan level kesalahan dari regsvr32.exe
sumber
Inilah yang saya temukan ketika menjalankan file batch secara paralel (beberapa contoh file bat yang sama pada saat yang sama dengan parameter input berbeda):
Katakanlah Anda memiliki file exe yang melakukan tugas panjang yang disebut LongRunningTask.exe
Jika Anda memanggil exe langsung dari file bat, hanya panggilan pertama ke LongRunningTask yang akan berhasil, sementara sisanya akan mendapatkan kesalahan OS "File sudah digunakan oleh proses"
Jika Anda menggunakan perintah ini:
mulai / B / Tunggu "" "parameter LongRunningTask.exe" ""
Anda akan dapat menjalankan beberapa instance dari bat dan exe, sambil masih menunggu tugas selesai sebelum bat melanjutkan mengeksekusi perintah yang tersisa. Opsi / B adalah untuk menghindari membuat jendela lain, tanda kutip kosong diperlukan untuk perintah untuk bekerja, lihat referensi di bawah ini.
Perhatikan bahwa jika Anda tidak menggunakan / WAIT di awal, LongRunningTask akan dieksekusi pada waktu yang sama dari perintah yang tersisa dalam file batch, jadi itu dapat membuat masalah jika salah satu dari perintah ini memerlukan output dari LongRunningTask
Melanjutkan:
Ini tidak dapat berjalan secara paralel:
Ini akan berjalan secara paralel dan akan baik-baik saja sejauh tidak ada dependensi data antara output dari perintah dan sisa file bat:
Ini akan berjalan secara paralel dan menunggu tugas selesai, sehingga Anda dapat menggunakan output:
Referensi untuk perintah mulai: Bagaimana saya bisa menjalankan program dari file batch tanpa membiarkan konsol terbuka setelah program dimulai?
sumber
Panggilan
Panggilan satu program batch dari yang lain tanpa menghentikan program batch induk. Perintah panggilan menerima label sebagai target panggilan. Panggilan tidak berpengaruh pada baris perintah saat digunakan di luar skrip atau file batch. https://technet.microsoft.com/en-us/library/bb490873.aspx
Mulailah
Mulai jendela Prompt Perintah terpisah untuk menjalankan program atau perintah yang ditentukan. Digunakan tanpa parameter, mulai membuka jendela prompt perintah kedua. https://technet.microsoft.com/en-us/library/bb491005.aspx
sumber
Ini adalah utas lama, tetapi saya baru saja menghadapi situasi ini dan menemukan cara yang rapi di sekitarnya. Saya mencoba menjalankan setup.exe, tetapi fokusnya kembali ke baris script berikutnya tanpa menunggu setup.exe selesai. Saya mencoba solusi di atas tanpa hasil.
Pada akhirnya, menyalurkan perintah melalui lebih banyak melakukan trik.
setup.exe {argumen} | lebih
sumber