2010-04-09 27 views
85

Một cửa sổ hàng loạt tập tin (called.bat hoặc called.cmd) có thể được gọi từ một tập tin thực thi (caller.bat hoặc caller.cmd) hoặc nhắc cmd.exe tương tác bằng nhiều cách:Một số cách để gọi tệp loạt cửa sổ từ một tệp khác hoặc từ lời nhắc. Cái nào trong trường hợp nào?

  1. cuộc gọi trực tiếp: called.bat
  2. sử dụng lệnh gọi: call called.bat
  3. sử dụng lệnh cmd: cmd /c called.bat
  4. sử dụng lệnh bắt đầu: start called.bat

Tôi đang gặp khó khăn trong việc phân biệt cách sử dụng dự định của mình dựa trên văn bản trợ giúp của họ: khi nào nên sử dụng nội dung nào? ví dụ. tại sao tôi có thể sử dụng lệnh 'gọi' thay vì gọi trực tiếp. Khác biệt là gì?

Tôi quan tâm đến một số báo cáo tóm tắt phân tích tất cả 4 khả năng (và những người khác nếu thiếu) từ nhiều quan điểm khác nhau: các trường hợp sử dụng được đề xuất để phù hợp, quy trình sinh sản, ngữ cảnh thực thi, môi trường, trả lại xử lý mã.

Lưu ý: Tôi đang sử dụng Windows XP SP3.

Trả lời

93
  1. Tệp lô sẽ được thực hiện bởi cá thể cmd.exe hiện tại (hoặc ví dụ cmd.exe mới nếu, ví dụ, bấm đúp trong Explorer).

  2. Giống như # 1, chỉ có tác dụng khi được sử dụng bên trong tệp batch/cmd. Trong một tập tin thực thi, mà không có 'cuộc gọi', tập tin batch cha mẹ kết thúc và kiểm soát đi đến tập tin thực thi được gọi là; với 'cuộc gọi' chạy tập tin batch con, và tập tin batch cha mẹ tiếp tục với các câu lệnh sau cuộc gọi.

  3. Chạy tệp lô trong phiên bản cmd.exe mới.

  4. Bắt đầu sẽ chạy tệp lô trong phiên bản cmd.exe mới trong cửa sổ mới và người gọi sẽ không đợi hoàn tất.

+7

Lưu ý cho tùy chọn 4, lệnh bắt đầu [phải luôn được theo sau bởi 'tiêu đề'] (http://ss64.com/nt/start.html), vì vậy nếu bạn không cần tiêu đề, bạn nên trống dấu ngoặc kép, ví dụ 'start" "[options] command' – Daryn

+0

@Daryn liên kết đơn giản đề cập rằng bạn nên luôn có một, nhưng thậm chí nói Microsoft mô tả tham số là tùy chọn. Họ không nói cho tôi biết tại sao nó phải là "yêu cầu". Ngay cả một số ví dụ của họ ở dưới cùng cũng bỏ qua tham số tiêu đề. –

2

Một điều không rõ ràng từ các ý kiến ​​ở đây: Khi bạn gọi một tập tin thực thi từ khác bằng cách chỉ sử dụng tên gọi của nó (Case # 1 trong câu hỏi ban đầu), thực hiện dừng từ tập tin gọi điện thoại hàng loạt. Ví dụ: trong các dòng này:

called.bat 
echo Hello 

Dòng 'echo Hello' (và bất kỳ thứ gì sau nó) sẽ không được gọi. Nếu bạn sử dụng từ khóa 'cuộc gọi', thực thi sẽ tiếp tục lại sau cuộc gọi. Vì vậy, trong trường hợp này:

call called.bat 
echo Hello 

Dòng 'echo Hello' sẽ được gọi.

Ngoài ra, tất cả các biến được đặt trong tệp gọi.bat cũng sẽ được chuyển trở lại quá trình gọi điện.

Hãy tưởng tượng một 'được gọi.dơi' tập tin đó có dòng này:

set MYVAR=hello 

Sau đó,% myVar% sẽ có sẵn cho các tập tin thực thi gọi nếu nó được sử dụng:

call called.bat 

Tuy nhiên, nó sẽ không được sử dụng

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

REM stops and replaces current cmd.exe process with a new one 
called.bat   
Các vấn đề liên quan