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

14

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

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

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

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

Пол Хэдфилд
источник

Ответы:

23

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

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

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

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

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

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

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

user1686
источник
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когда вы закончите.

Ричард
источник