Có thể giúp hiểu vấn đề từ một khía cạnh khác .. Giả sử bạn là lập trình viên chịu trách nhiệm thêm bộ lập lịch tác vụ vào Windows. Bạn sẽ làm điều này như thế nào? Bạn có một số vấn đề cần giải quyết: Nếu tác vụ được chạy với tư cách là người khác không phải người dùng đã đăng nhập, bạn có nên làm phiền người dùng đã đăng nhập với bất kỳ lỗi bật lên nào không? Điều gì nếu không có người dùng đăng nhập tại thời điểm tác vụ được chạy? Còn sự khác biệt giữa chương trình GUI và chương trình console thì sao? GUI không có stdin, stdout và stderr; khái niệm này là vô nghĩa trong họ. Điều gì về các chương trình nội bộ hoặc bên ngoài đối với HOL.COM / CMD.EXE? Hoặc các công cụ kịch bản khác? Điều gì về các đường dẫn có khoảng trắng trong tên lệnh? Hoặc trong các tham số (tùy chọn / đối số)? (Hiện tại bạn đang cố gắng giải quyết ..)
Mặc dù tôi không chắc chắn 100% về nội bộ hoặc chi tiết kỹ thuật đầy đủ trong trường hợp này, nhưng câu trả lời dường như là .. Các tác vụ được chạy trong một phiên không tương tác, bị cô lập, không thể tương tác với người dùng hiện đang đăng nhập (nếu có ); Nó chạy hy vọng sẽ không có đầu ra giao diện điều khiển, vì nó không tương tác, nó không thể làm gián đoạn bất kỳ người dùng đã đăng nhập nào để hiển thị đầu ra, dù sao đi nữa (và nếu có đầu ra, stdin là bitbucket / NULL, stdout và stderr được đăng nhập vào cơ sở khai thác hệ thống); Không gian được xử lý bằng cách bỏ qua vấn đề: tên lệnh được lấy CHÍNH XÁC và các tham số được truyền cho lệnh được chỉ định trong hộp đầu vào khác trong thuộc tính Tác vụ.
Tất cả các phương tiện là nhiệm vụ của bạn phải được chạy như thể nó giống như một daemon (trong thế giới Un * x). Mọi thứ đều tĩnh và chính xác. Tên lệnh là tên lệnh thực tế, không có bất kỳ tham số nào. Điều này thường bao gồm các trình thông dịch lệnh / script đang chạy, chẳng hạn như CMD.EXE! Các tham số, nếu có, được chỉ định ở nơi khác và phải được biết khi bạn thiết lập tác vụ (nghĩa là bạn không thể thay đổi các tham số "đang hoạt động"). Và như thế.
Vì vậy, nếu bạn muốn bao gồm các tham số, bạn phải sử dụng phần tham số để chỉ định tham số. Trình lập lịch tác vụ thực hiện khôngcố gắng phân tích tên lệnh để tách nó thành "lệnh" và "args" giống như các chương trình dòng lệnh làm. Nó chỉ coi nó như một tên lệnh lớn, đầy đủ. Tương tự, nếu bạn muốn các tham số biến đổi, như sử dụng% 1 ..% n trong các tệp BATCH, bạn không thể làm như vậy từ chính Trình lập lịch tác vụ; Bạn sẽ phải tìm một cách khác. (Lưu ý rằng bạn không thể sử dụng các biến môi trường, vì môi trường được truyền cho chương trình phụ thuộc vào môi trường mà tác vụ được bắt đầu, KHÔNG phải môi trường "hiện tại".) Bạn có thể sử dụng tệp tạm thời để lưu tham số, nhưng vì bạn phải chỉ định tên tệp tĩnh trong thuộc tính Tác vụ, điều gì xảy ra khi bạn ở trên mạng có 5000 người dùng và bốn người trong số họ cố gắng chạy cùng một tác vụ cùng một lúc? Tất cả họ sẽ ghi đè lên nhau khi cố gắng ghi vào cùng một tệp tạm thời, có lẽ không phải là những gì bạn muốn (Cũng có giải pháp cho vấn đề này, nhưng điều đó đi quá xa phạm vi của câu hỏi và câu trả lời này ..)
Vì vậy, câu trả lời cuối cùng: Trong trường hợp đơn giản - đường dẫn bạn muốn chuyển qua làm tham số là tĩnh và không thay đổi - bạn phải chỉ định tham số trong thuộc tính Tác vụ (Đối số) thích hợp thay vì trong hộp Chương trình / Tập lệnh hoặc sử dụng tệp bó. Trong trường hợp phức tạp hơn - bạn sẽ cần hỏi đúng câu hỏi hoặc nghiên cứu cách hoạt động của daemon và cách sử dụng khóa / semaphores và như vậy cho giao tiếp giữa các quá trình (IPC).
Chúc may mắn.