![无需 CMD /C 的计划任务和环境变量](https://linux22.com/image/1378362/%E6%97%A0%E9%9C%80%20CMD%20%2FC%20%E7%9A%84%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E5%92%8C%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我需要在 Windows 2003 任务计划程序中运行一项任务,但该命令需要访问环境变量:
vlc.exe http://62.196.56.141:8080 --sout=#std{access=file,mux=raw,dst="C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3"}
虽然上述命令从批处理文件或命令提示符发出时会起作用,但从任务计划程序运行时它不会正确扩展变量。
有人会争辩说,这可以使用 CMD /C 前缀来实现,允许在命令提示符内启动命令,但是由于任务必须在一段时间后强制终止,因此 cmd.exe 将代替调用的命令(在本例中为 vlc.exe)终止。
有没有提示如何在不使用批处理文件或命令提示符的情况下运行命令,同时正确继承环境变量?
答案1
尝试这个
cmd /c start "" vlc.exe http://62.196.56.141:8080 --sout=#std{access=file,mux=raw,dst="C:\temp\streaming\%Date:~6,4%-%Date:~3,2%-%Date:~0,2%-RSMorning.mp3"}
你可以用类似下面的命令来终止 vlc
taskkill /fi "imagename eq vlc.exe"
编辑- 现在我完全理解你的困境:
我确信没有简单的解决方案可以让您访问环境变量,同时让任务调度程序在时间流逝后终止 vlc。您的程序对环境变量扩展一无所知,因此必须在调用之前发生vlc.exe
。这就是 的工作cmd.exe
。不幸的是,Windows 没有真正的子进程,因此如果您vlc.exe
通过启动cmd.exe
,那么当您任务调度程序终止 时cmd.exe
,该vlc.exe
进程仍然存在。
我相信您必须编写一个启动的脚本vlc.exe
,并记住 PID。然后,该脚本将等待您规定的时间,然后终止 vlc。任务调度程序可以启动您的脚本。
我相信您可以使用 Windows 2003 上的批处理脚本执行您想要的操作,具体取决于该版本的 Windows 上有哪些工具(命令)。
TIMEOUT 可用于引入延迟。例如,等待 1 分钟:
timeout 60 /nobreak >nul
WMIC 可用于启动进程并返回 PID。请参阅Windows CMD Shell»启动进程并获取其 PID。我认为棘手的部分是传递引用的参数,但这是可以做到的。阅读整个帖子。