Доступ к переменным среды в запланированной задаче


14

При настройке запланированного задания для раздела действий я пытаюсь получить доступ к переменной среды для расположения исполняемого файла, который я хочу запустить. Это происходит главным образом потому, что на одном компьютере исполняемый файл может находиться в C: на другом он может быть в D: я убедился, что если я использую жестко закодированный путь, запускается мое запланированное задание, но если я изменяю действие, чтобы указать "%MyAppPath%\MyApp.exe"на задание не начнет терпеть неудачу запуска. Я проверил, что переменная окружения установлена.

Возможно ли даже в части действия (и рабочей директории) расписания задач ссылаться на переменную среды - мой синтаксис неверен.

Кстати, я подумал о том, чтобы вызвать BAT-файл и сослаться на переменную окружения, но это ничего не решает для меня, поскольку основная проблема заключается в том, чтобы узнать, находится ли приложение (и файл bat) на C: или D: диски - внутри самого диска путь тот же.

ОБНОВЛЕНИЕ : Оказывается, вы можете использовать их с перезагрузкой компьютера, но, возможно, есть лучший способ

Ответы:


23

Вам не нужна перезагрузка машины. Вы должны прекратить выполнение Taskeng.exe, и при следующем запуске запланированного задания будет получено обновленное окружение.


Спасибо, так много! Я боролся с этим в течение нескольких дней. Я пытался перезапустить службу планировщика, но безуспешно в Win7 / Win2008 (нужно запустить ее как SYSTEM, чтобы перезапустить ее), но это намного проще!
— Тимур

2

Я думал, что вы можете ссылаться на переменные окружения из планировщика задач, но только что попробовал, это не похоже на то, что вы можете.

Единственное исключение, по-видимому %PATH%, состоит в том, можно ли добавить свое MyAppPathзначение в %PATH%коллекцию на каждом компьютере, а затем просто позвонить MyApp.exeиз планировщика задач, где машина сможет разрешить полный путь по мере необходимости?


1
Интересно, я только что попробовал с% PATH% и не смог заставить его работать. В тот момент я заметил глупую опечатку, когда обновил% PATH%. Я исправил опечатку и удостоверился, что PATH был в порядке в окне DOS, но запланированное задание все еще сообщало о проблеме, указывая, что она видит «плохую» версию% PATH%. Перезагрузка была необходима, чтобы забрать изменения (так как вы не можете перезапустить планировщик задач). В этот момент оказалось, что теперь я могу использовать свою исходную переменную окружения. Таким образом, в результате вы можете использовать переменные окружения, но для получения любых изменений / новых переменных окружения необходима полная перезагрузка компьютера
— Пол Хэдфилд,

Это будет помечено как ответ, так как вы были правы, что вы можете использовать их, но если планировщик задач запустился до того, как вы изменили задание / добавили ссылку на переменную среды, потребуется перезагрузка компьютера.
— Пол Хэдфилд

2
Смотрите ответ Цвайера - вам не нужно перезагружать машину. Просто процесс планировщика задач.
— Бен Чалленор

1

Кстати, я подумал о том, чтобы вызвать BAT-файл и сослаться на переменную окружения, но это ничего не решает для меня, поскольку основная проблема заключается в том, чтобы узнать, находится ли приложение (и файл bat) на C: или D: диски - внутри самого диска путь тот же.

%~d0расширится до буквы диска, на котором расположен командный файл. ( %~dp0для диска + каталог и т. д. )


1

Ответ tsvayer не совсем работал для меня, на компьютере под управлением Windows 7, но он указал мне в правильном направлении. Планировщик заданий, кажется, служба на моем компьютере; это имя Schedule; отображаемое имя - планировщик заданий .

Помимо перезапуска его из MMC служб , его можно перезапустить с помощью следующих wmicкоманд, запускаемых из окна командной строки (с правами администратора):

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

Конечно, вы также можете перезапустить сервис, используя sc:

sc stop Schedule
sc start Schedule

Основываясь на методе проб и ошибок, кажется достаточным отключить, а затем снова включить одну задачу, если это все, на что вам нужно повлиять:

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

0

Кстати, я подумал о том, чтобы вызвать BAT-файл и сослаться на переменную окружения, но это ничего не решает для меня, так как основная проблема заключается в том, чтобы знать, находится ли приложение (и файл bat) на C: или D: диски - внутри самого диска путь тот же.

Развивая ответ Гравити, я использую двухэтапный процесс. Это позволяет мне использовать путь в других операторах, когда это необходимо.

SET WD=%~dp0
pushd %WD%

ПРИМЕЧАНИЕ: pushdизменяет как диск, так и каталог. И если вы хотите быть чистым, popdкогда вы закончите.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.