2011-01-28 24 views

Trả lời

15

Bạn nên sử dụng call khi bạn cần gọi một chương trình lô khác (tập lệnh cmd). Sử dụng 'cuộc gọi' sẽ không có hiệu lực nếu prog1 là một tệp thi hành. (prog1.exe)

Nếu bạn, ví dụ, có hai kịch bản:

cmd1.cmd 
cmd2.cmd 

Và trong vòng cmd1.cmd bạn có một dòng:

cmd2.cmd 

... sau đó kịch bản của bạn sẽ ngừng càng sớm càng cmd2.cmd đã hoàn tất thi hành. Thay vào đó bạn nên sử dụng:

call cmd2.cmd 
+0

Aha - vì vậy sự khác biệt giữa các tập tin thực thi bên ngoài và kịch bản cmd bên ngoài là chìa khóa.Cảm ơn cho sự giác ngộ. – Martin

3

Cuộc gọi thông thường được sử dụng để chạy một tệp lô khác trong một tệp lô. Khi tập tin batch được gọi là hoàn thành, phần còn lại của tập tin batch gốc được hoàn thành.

Lưu ý nếu tệp lô không tồn tại, nó sẽ cung cấp thông báo lỗi.

Cú pháp là: CALL [drive:][path]filename [batch-parameters]

Không có hạn chế trong nơi để gọi nó. Bạn có thể sử dụng lệnh CALL trong bất kỳ tệp lô nào để gọi một tệp lô khác.

Hy vọng điều này sẽ hữu ích.

20

Bạn nên sử dụng call khi bạn có muốn:

  • cuộc gọi khác lệnh tập tin và trở về điều này một khi nó được thực hiện.; hoặc
  • gọi hàm trong tệp lệnh hiện tại.

Một tập tin lệnh với dòng:

number2.cmd 

sẽ chuỗi đến tập tin number2.cmd, có nghĩa là nó sẽ chạy kịch bản đó nhưng không quay trở lại để tiếp tục thực hiện trên một dòng.

Đối với các điểm thứ hai, bạn có thể làm những việc như:

call :subroutine 
call :subroutine 
goto :eof 

:subroutine 
    echo in here 
    goto :eof 

và bạn sẽ nhận được in here in hai lần. Khả năng gọi hàm này trong script lệnh thực sự khá tiện dụng.

+2

+1 - Tính năng chương trình con trông rất hữu ích. – Martin

+0

@paxdiablo, Bạn có ý nghĩa gì bởi "* chain * đối với tệp' number2.cmd' "? – Pacerier

+0

@Pacerier, tôi có nghĩa là nó sẽ không trở lại kịch bản hiện tại khi thực hiện, một cụm từ tôi đã tổ chức vào kể từ ngày lập trình BASIC của tôi quá nhiều thập kỷ trước đây :-) Xem https://en.m.wikipedia.org/wiki/Chain_loading để biết chi tiết. Tôi hy vọng rằng điều đó rõ ràng hơn với bản chỉnh sửa. – paxdiablo

Các vấn đề liên quan