在计划任务中访问环境变量


14

在设置计划任务时,对于操作部分,我试图访问环境变量以获取希望运行的可执行文件的位置。这主要是因为在一台计算机上可执行文件可以在C中:在另一台计算机上可执行文件可以在D中:我已验证,如果我使用硬编码路径,则计划的任务会运行,但是如果我更改操作以指向"%MyAppPath%\MyApp.exe"任务,不会开始发射失败。我已经验证了环境变量的设置。

甚至可能在任务计划的操作(和工作目录)部分中引用环境变量-我的语法错误。

附带一提,我确实考虑过调用BAT文件并在其中引用环境变量,但这对我没有解决任何问题,因为主要问题实际上是知道应用程序(以及bat文件)是否在C上:或D:驱动器-驱动器内部的路径相同。

更新:事实证明您可以在计算机重新启动时使用它们,但是也许有更好的方法

Answers:


23

您不需要重新启动计算机。您应该终止Taskeng.exe,并且下次运行计划任务时,它将获得更新的环境。


太谢谢你了!我已经为此苦苦挣扎了好几天。我一直试图在Win7 / Win2008中重新启动Scheduler服务无济于事(需要以SYSTEM身份运行以重新启动它),但这要简单得多!
帖木儿

2

我以为您可以从“任务计划程序”中引用环境变量,但是刚刚尝试过,它看起来就不行了。

一个例外似乎是%PATH%这样,是否有可能将您的MyAppPath值添加到%PATH%每台计算机上的集合中,然后仅从MyApp.exe任务调度程序中调用,计算机就可以在其中按要求解析完全限定的路径?


1
有趣的是,我只是尝试使用%PATH%而无法使其正常工作。那时,我在更新%PATH%时注意到了一个愚蠢的错字。我修复了错字并验证了DOS在DOS框中是否可以使用PATH,但计划的任务仍然报告了该问题-表示它正在看到%PATH%的“错误”版本。需要重新启动才能获取更改(因为您无法重新启动任务计划程序)。到那时,事实证明我现在可以使用我的原始环境变量了。因此,结果是您可以使用环境变量,但是需要重新启动计算机才能进行所有更改/新的环境变量
Paul Hadfield

可以正确地使用它们,将其标记为答案,但是如果在修改作业/添加对环境变量的引用之前已运行任务计划程序,则需要重新启动计算机。
保罗·哈德菲尔德

2
请参阅tsvayer的答案-您无需重新启动计算机。只是任务计划程序过程。
Ben Challenor 2013年

1

附带一提,我确实考虑过调用BAT文件并在其中引用环境变量,但这对我没有解决任何问题,因为主要问题实际上是知道应用程序(以及bat文件)是否在C上:或D:驱动器-驱动器内部的路径相同。

%~d0将扩展为批处理文件所在的驱动器号。(%~dp0用于drive + directory,依此类推。


1

在运行Windows 7的计算机上,tsvayer的答案对我而言并不奏效,但这为我指明了正确的方向。Task Scheduler似乎是我计算机上的一项服务;它的名字是Schedule;显示名称是Task Scheduler

除了从“ 服务” 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:驱动器-驱动器内部的路径相同。

扩展一下grawity的答案,我使用一个两步过程。这使我可以在需要时在其他语句中使用该路径。

SET WD=%~dp0
pushd %WD%

注意:pushd更改驱动器和目录。如果您想清洁,popd请在完成之后。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.