Beberapa cara untuk memanggil file batch windows dari yang lain atau dari prompt. Dalam hal apa?


92

File batch windows ( called.batatau called.cmd) dapat dipanggil dari file batch lain ( caller.batatau caller.cmd) atau prompt cmd.exe interaktif dengan beberapa cara:

  1. panggilan langsung: called.bat
  2. menggunakan perintah panggilan: call called.bat
  3. menggunakan perintah cmd: cmd /c called.bat
  4. menggunakan perintah start: start called.bat

Saya cukup kesulitan untuk membedakan penggunaan yang dimaksudkan berdasarkan teks bantuan mereka: kapan harus menggunakan yang mana? misalnya mengapa saya mungkin menggunakan perintah 'panggil' daripada panggilan langsung. Apa bedanya?

Saya tertarik pada beberapa laporan ringkasan yang menganalisis semua 4 kemungkinan (dan lainnya jika ada yang hilang) dari berbagai sudut pandang: kasus penggunaan yang disarankan yang dirancang agar sesuai, proses pemijahan, konteks eksekusi, lingkungan, pemrosesan kode pengembalian.

Catatan: Saya menggunakan Windows XP SP3.

Jawaban:


101
  1. File batch akan dijalankan oleh contoh cmd.exe saat ini (atau contoh cmd.exe baru jika, misalnya, diklik dua kali di Explorer).

  2. Sama seperti # 1, hanya berpengaruh jika digunakan di dalam file batch / cmd. Dalam file batch, tanpa 'panggilan', file batch induk berakhir dan kontrol lolos ke file batch yang disebut; dengan 'call' menjalankan file batch anak, dan file batch induk dilanjutkan dengan pernyataan setelah panggilan.

  3. Menjalankan file batch dalam contoh cmd.exe baru.

  4. Start akan menjalankan file batch dalam contoh cmd.exe baru di jendela baru, dan pemanggil tidak akan menunggu sampai selesai.


7
Catatan untuk opsi 4, perintah mulai harus selalu diikuti dengan 'judul' , jadi jika Anda tidak memerlukan judul, Anda harus memiliki tanda kutip ganda kosong, misalnyastart "" [options] command
Daryn

@Daryn tautan itu hanya menyebutkan bahwa Anda harus selalu memilikinya, tetapi bahkan mengatakan Microsoft mendeskripsikan parameter sebagai opsional. Mereka gagal memberi tahu saya mengapa itu harus "diperlukan". Bahkan beberapa contoh mereka di bagian bawah mengabaikan parameter judul.
Adam Plocher

5

Satu hal yang tidak jelas dari komentar di sini: Ketika Anda memanggil satu file batch dari file lain dengan hanya menggunakan namanya (Kasus # 1 dalam pertanyaan asli), eksekusi berhenti dari file batch yang dipanggil. Misalnya, di baris ini:

called.bat
echo Hello

Baris 'echo Hello' (dan apa pun yang mengikutinya) tidak akan dipanggil. Jika Anda menggunakan kata kunci 'panggilan', eksekusi dilanjutkan setelah panggilan. Jadi dalam kasus ini:

call called.bat
echo Hello

Baris 'echo Hello' akan dipanggil.

Selain itu, semua variabel yang disetel dalam file bernama.bat akan diteruskan kembali ke proses pemanggilan juga.

Bayangkan file 'dipanggil.bat' yang memiliki baris ini:

set MYVAR=hello

Kemudian,% MYVAR% akan tersedia untuk file batch pemanggil jika digunakan:

call called.bat

Tapi, itu tidak akan berhasil

REM starts a new cmd.exe process
start called.bat   

REM stops and replaces current cmd.exe process with a new one
called.bat        
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.