13

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

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

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

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

5 ответов5

21

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

2

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

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

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 когда закончишь .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .