Truy cập các biến môi trường trong tác vụ theo lịch trình


14

Khi thiết lập một tác vụ theo lịch trình, đối với phần hành động tôi đang cố truy cập vào một biến môi trường cho vị trí của tệp thực thi mà tôi muốn chạy. Điều này chủ yếu là vì trên một máy có thể thực thi được trong C: trên máy khác có thể trên D: Tôi đã xác minh rằng nếu tôi sử dụng đường dẫn được mã hóa cứng, tác vụ theo lịch trình của tôi sẽ chạy, nhưng nếu tôi thay đổi hành động để trỏ đến "%MyAppPath%\MyApp.exe"tác vụ sẽ không bắt đầu chịu một thất bại khởi động. Tôi đã xác minh rằng biến môi trường được thiết lập.

Có phải thậm chí có thể bên trong hành động (và thư mục làm việc) của lịch trình tác vụ để tham chiếu một biến môi trường - là cú pháp của tôi sai.

Bên cạnh đó, tôi đã nghĩ đến việc gọi một tệp BAT và tham chiếu biến môi trường ở đó, nhưng điều đó không giải quyết được gì cho tôi vì vấn đề chính là thực sự biết liệu ứng dụng (và cả tập tin bat) có trên C: hoặc D: ổ đĩa - bên trong ổ đĩa chính là đường dẫn giống nhau.

CẬP NHẬT : Hóa ra bạn có thể sử dụng chúng với khởi động lại máy nhưng có lẽ có một cách tốt hơn

Câu trả lời:


23

Bạn không cần khởi động lại máy. Bạn nên chấm dứt TASkeng.exe và lần sau khi tác vụ theo lịch trình được chạy, nó sẽ nhận được một môi trường cập nhật.


Cảm ơn bạn rất nhiều! Tôi đã vật lộn với nó trong nhiều ngày. Tôi đã cố gắng khởi động lại dịch vụ Trình lập lịch biểu nhưng không có kết quả trong Win7 / Win2008 (cần chạy như HỆ THỐNG để khởi động lại nó), nhưng việc này đơn giản hơn nhiều!
Timur

2

Tôi nghĩ rằng bạn có thể tham chiếu các biến môi trường từ Trình lập lịch tác vụ, nhưng chỉ cần thử, nó không giống như bạn có thể.

Một ngoại lệ dường %PATH%như là có thể thêm MyAppPathgiá trị của bạn vào %PATH%bộ sưu tập trên mỗi máy, sau đó chỉ cần gọi MyApp.exetừ bộ lập lịch tác vụ, nơi máy sẽ có thể giải quyết đường dẫn đủ điều kiện theo yêu cầu?


1
Thật thú vị, tôi chỉ thử với% PATH% và không thể làm cho nó hoạt động. Vào thời điểm đó, tôi nhận thấy một lỗi đánh máy ngu ngốc khi tôi cập nhật% PATH%. Tôi đã sửa lỗi chính tả và xác minh rằng PATH vẫn ổn trong hộp DOS, nhưng tác vụ theo lịch trình vẫn báo cáo sự cố - cho biết nó đang nhìn thấy phiên bản "xấu" của% PATH%. Cần khởi động lại để nhận thay đổi (vì bạn không thể khởi động lại lịch trình tác vụ). Tại thời điểm đó, hóa ra bây giờ tôi có thể sử dụng biến môi trường ban đầu của mình. Vì vậy, kết quả cuối cùng là bạn có thể sử dụng các biến môi trường, nhưng cần phải khởi động lại toàn bộ máy để nhận bất kỳ thay đổi / biến môi trường mới
Paul Hadfield

Sẽ đánh dấu đây là câu trả lời vì bạn đã đúng rằng bạn có thể sử dụng chúng nhưng nếu trình lập lịch tác vụ đã chạy trước khi bạn sửa đổi công việc / thêm tham chiếu vào biến môi trường, nó sẽ cần khởi động lại máy.
Paul Hadfield

2
Xem câu trả lời của tsvayer - bạn không cần phải khởi động lại máy. Chỉ cần quá trình lập lịch trình nhiệm vụ.
Ben Challenor

1

Bên cạnh đó, tôi đã nghĩ đến việc gọi một tệp BAT và tham chiếu biến môi trường ở đó, nhưng điều đó không giải quyết được gì cho tôi vì vấn đề chính là thực sự biết liệu ứng dụng (và cả tập tin bat) có trên C: hoặc D: ổ đĩa - bên trong ổ đĩa chính là đường dẫn giống nhau.

%~d0sẽ mở rộng thành ký tự ổ đĩa nơi chứa tệp bó. ( %~dp0đối với ổ đĩa + thư mục, v.v. )


1

Câu trả lời của tsvayer không hoàn toàn phù hợp với tôi, trên một máy tính chạy Windows 7, nhưng nó đã chỉ cho tôi đi đúng hướng. Trình lập lịch tác vụ dường như là một dịch vụ trên máy tính của tôi; tên của nó là Schedule; tên hiển thị là Trình lập lịch tác vụ .

Bên cạnh việc khởi động lại nó từ Dịch vụ MMC, nó có thể được khởi động lại bằng các wmiclệnh sau chạy từ cửa sổ Dấu nhắc Lệnh (với đặc quyền của quản trị viên):

wmic service where "name='Schedule'" call StopService
wmic service where "name='Schedule'" call StartService

Tất nhiên bạn cũng có thể khởi động lại dịch vụ bằng cách sử dụng sc:

sc stop Schedule
sc start Schedule

Dựa trên bản dùng thử và lỗi, có vẻ như đủ để vô hiệu hóa và sau đó kích hoạt lại một tác vụ, nếu đó là tất cả những gì bạn cần ảnh hưởng:

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE

0

Bên cạnh đó, tôi đã nghĩ đến việc gọi một tệp BAT và tham chiếu biến môi trường ở đó, nhưng điều đó không giải quyết được gì cho tôi vì vấn đề chính là thực sự biết liệu ứng dụng (và cả tập tin bat) có trên C: hoặc D: ổ đĩa - bên trong ổ đĩa, đường dẫn là như nhau.

Mở rộng dựa trên câu trả lời của grawity, tôi sử dụng quy trình hai bước. Điều này cho phép tôi sử dụng đường dẫn trong các câu lệnh khác khi cần.

SET WD=%~dp0
pushd %WD%

LƯU Ý: pushdthay đổi cả ổ đĩa và thư mục. Và nếu bạn muốn sạch sẽ, popdkhi bạn hoàn thành.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.