Perintah CALL vs. MULAI dengan opsi / TUNGGU


149

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?


Jawaban:


183

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 CALLakan 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.

STARTakan 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

Menggunakanstart /wait <prog>
- Perubahan variabel lingkungan hilang ketika <prog>ujungnya
- Pemanggil menunggu sampai <prog>selesai

Menggunakancall <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 pemanggil

Tambahan:

Menggunakan CALLdapat mengubah parameter (untuk file batch dan exe), tetapi hanya ketika mereka mengandung tanda tanda atau persen.

call myProg param1 param^^2 "param^3" %%path%%

Akan diperluas ke (dari dalam file batch)

myProg param1 param2 param^^3 <content of path>

25
Saat mengeksekusi file.bat menggunakan START / WAIT Anda perlu menentukan START / WAIT cmd / c "file.bat" daripada hanya MULAI / MENUNGGU "file.bat", jika tidak, jendela cmd yang dibuat untuk file.bat akan tetap terbuka
FrinkTheBrave

5
Anda dapat menemukan perbandingan antara CALL dan MULAI di: ss64.com/nt/start.html (diperbarui hari ini dengan bagian "Mulai / Tunggu" dan "MULAI vs PANGGILAN")
Alfredo Capobianchi

Favorit saya adalah start /wait /b cmd /c <batchfile.bat>karena file batch dijalankan satu demi satu di jendela perintah yang sama
linux64kb

@ linux64kb, Tapi untuk file batch itu tidak perlu, Anda hanya perlucall batchfile.bat
jeb

@ jeb Benar. Saya lebih suka yang ini karena setiap file batch akan berjalan dalam lingkungan shell perintah yang berbeda, mewarisi variabel dari shell panggilan dan perubahan nilai awal akan hilang setelah batch selesai -> tidak ada sampah yang tersisa di sana setelah setiap kali berturut-turut dijalankan. Kemenangan lainnya adalah, bahwa Anda tidak harus berurusan dengan mengatur ulang variabel dalam skrip Anda.
linux64kb

17

Saya pikir mereka harus melakukan secara umum sama, tetapi ada beberapa perbedaan. STARTumumnya digunakan untuk memulai aplikasi atau untuk memulai aplikasi default untuk jenis file yang diberikan. Dengan begitu jika Anda START http://mywebsite.comtidak melakukannya START iexplore.exe http://mywebsite.com.

START myworddoc.docxakan memulai Microsoft Word dan membuka myworddoc.docx. CALL myworddoc.docxmelakukan hal yang sama ... namun STARTmenyediakan 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.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.
path        Starting directory.
B           Start application without creating a new window. The
            application has ^C handling ignored. Unless the application
            enables ^C processing, ^Break is the only way to interrupt
            the application.
I           The new environment will be the original environment passed
            to the cmd.exe and not the current environment.
MIN         Start window minimized.
MAX         Start window maximized.
SEPARATE    Start 16-bit Windows program in separate memory space.
SHARED      Start 16-bit Windows program in shared memory space.
LOW         Start application in the IDLE priority class.
NORMAL      Start application in the NORMAL priority class.
HIGH        Start application in the HIGH priority class.
REALTIME    Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE        Specifies the preferred Non-Uniform Memory Architecture (NUMA)
            node as a decimal integer.
AFFINITY    Specifies the processor affinity mask as a hexadecimal number.
            The process is restricted to running on these processors.

            The affinity mask is interpreted differently when /AFFINITY and
            /NODE are combined.  Specify the affinity mask as if the NUMA
            node's processor mask is right shifted to begin at bit zero.
            The process is restricted to running on those processors in
            common between the specified affinity mask and the NUMA node.
            If no processors are in common, the process is restricted to
            running on the specified NUMA node.
WAIT        Start application and wait for it to terminate.


8

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:

  • sebut LongRunningTask.exe

Ini akan berjalan secara paralel dan akan baik-baik saja sejauh tidak ada dependensi data antara output dari perintah dan sisa file bat:

  • mulai / B "" "parameter LongRunningTask.exe" ""

Ini akan berjalan secara paralel dan menunggu tugas selesai, sehingga Anda dapat menggunakan output:

  • mulai / B / Tunggu "" "parameter LongRunningTask.exe" ""

Referensi untuk perintah mulai: Bagaimana saya bisa menjalankan program dari file batch tanpa membiarkan konsol terbuka setelah program dimulai?


6

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


-1

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.