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

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

在设置计划任务时,对于操作部分,我尝试访问要运行的可执行文件位置的环境变量。这主要是因为在一台机器上,可执行文件可能位于 C:,而在另一台机器上,可执行文件可能位于 D:。我​​已经验证,如果我使用硬编码路径,我的计划任务就会运行,但如果我将操作更改为指向,则"%MyAppPath%\MyApp.exe"任务不会开始出现启动失败。我已经验证环境变量已设置。

任务计划的操作(和工作目录)部分内是否可以引用环境变量 - 我的语法错误吗?

顺便说一句,我确实考虑过调用一个 BAT 文件并在那里引用环境变量,但这并不能解决我的问题,因为主要问题实际上是知道应用程序(以及 bat 文件)是在 C: 还是 D: 驱动器上 - 在驱动器本身内部,路径是相同的。

更新:事实证明,您可以通过重新启动机器来使用它们,但也许有更好的方法

答案1

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

答案2

我以为您可以从任务计划程序中引用环境变量,但是刚刚尝试过,似乎不行。

唯一的例外似乎是%PATH%,那么是否可以将您的MyAppPath值添加到%PATH%每台机器的集合中,然后只需MyApp.exe从任务调度程序调用,机器将能够根据需要解析完全限定的路径?

答案3

顺便说一句,我确实考虑过调用一个 BAT 文件并在那里引用环境变量,但这并不能解决我的问题,因为主要问题实际上是知道应用程序(以及 bat 文件)是在 C: 还是 D: 驱动器上 - 在驱动器本身内部,路径是相同的。

%~d0将扩展为批处理文件所在的驱动器号。(%~dp0对于驱动器+目录,等等。

答案4

顺便说一句,我确实考虑过调用一个 BAT 文件并在那里引用环境变量,但这并不能解决我的问题,因为主要问题实际上是知道应用程序(以及 bat 文件)是在 C: 还是 D: 驱动器上 - 在驱动器本身内部,路径是相同的。

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

SET WD=%~dp0
pushd %WD%

注意:pushd更改驱动器和目录。如果您想要干净,请popd在完成后进行。

相关内容