Tarefa agendada e variáveis de ambiente SEM CMD / C

1

Eu preciso executar uma tarefa no Agendador de Tarefas do Windows 2003, mas o comando precisa acessar as variáveis de ambiente:

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"}

Embora o comando acima funcione quando emitido a partir de um arquivo em lotes ou de um prompt de comando, ele não expandirá corretamente as variáveis quando executado no Agendador de Tarefas.

Alguém poderia argumentar que isso pode ser alcançado usando o prefixo CMD / C, permitindo que o comando seja iniciado em um prompt de comando, mas como a tarefa deve ser encerrada à força após um tempo, o cmd.exe será encerrado no lugar do comando invocado (neste caso, vlc.exe).

Alguma dica de como executar o comando sem usar um arquivo em lote ou o prompt de comando, enquanto herda as variáveis de ambiente corretamente?

    
por Riccardo 17.09.2013 / 15:35

1 resposta

0

Tente isso

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"}

Você pode matar vlc com algo como

taskkill /fi "imagename eq vlc.exe"

EDITAR - Agora que entendi completamente seu dilema:

Tenho certeza de que não há uma solução simples que lhe dê acesso às variáveis de ambiente e também permita que o agendador de tarefas mate a vlc após o decorrer do tempo. Seu programa não sabe nada sobre expansão de variáveis de ambiente, portanto isso deve ocorrer antes de vlc.exe ser chamado. Esse é o trabalho de cmd.exe . Infelizmente, o Windows não possui processos filho verdadeiros, portanto, se você iniciar vlc.exe via cmd.exe , quando o agendador de tarefas mata cmd.exe , o processo vlc.exe permanece.

Eu acredito que você terá que escrever um script que lance vlc.exe , lembrando o PID. O script, em seguida, aguardaria sua quantidade de tempo prescrita e, em seguida, mataria vlc. O agendador de tarefas pode iniciar seu script.

Acredito que você pode fazer o que quiser com um script em lote no Windows 2003, dependendo de quais ferramentas (comandos) estão disponíveis nessa versão do Windows.

TIMEOUT pode ser usado para introduzir um atraso. Por exemplo, para aguardar 1 minuto:

timeout 60 /nobreak >nul

O WMIC pode ser usado para iniciar um processo e retornar o PID. Veja Windows CMD Shell »Inicie um processo e obtenha seu PID . Eu acho que a parte complicada estará passando os argumentos citados, mas isso pode ser feito. Leia o tópico inteiro.

    
por 17.09.2013 / 16:02