Acessando variáveis de ambiente em uma tarefa agendada

13

Ao configurar uma tarefa agendada, para a seção de ação, estou tentando acessar uma variável de ambiente para o local do executável que desejo executar. Isto é principalmente porque em uma máquina o executável poderia estar em C: em outro ele poderia estar em D: Eu verifiquei que se eu usar um caminho codificado minha tarefa agendada é executada, mas se eu mudar a ação para apontar para "%MyAppPath%\MyApp.exe" a tarefa não começará a sofrer uma falha de lançamento. Eu verifiquei que a variável de ambiente está configurada.

É possível dentro da parte de ação (e diretório de trabalho) do cronograma de tarefas referenciar uma variável de ambiente - minha sintaxe está errada.

Em uma nota lateral, eu pensei em chamar um arquivo BAT e referenciar a variável de ambiente lá, mas isso não resolve nada para mim, já que o principal problema é saber se o aplicativo (e o arquivo bat também) está em C: ou D: drives - dentro do próprio drive o caminho é o mesmo.

UPDATE : Acontece que você pode usá-los com a reinicialização da máquina, mas talvez haja uma maneira melhor

    
por Paul Hadfield 02.09.2011 / 12:48

5 respostas

20

Você não precisa de uma reinicialização da máquina. Você deve encerrar o Taskeng.exe e, na próxima vez que a tarefa agendada for executada, ele obterá um ambiente atualizado.

    
por 03.01.2013 / 20:30
2

Eu pensei que você poderia referenciar as variáveis de ambiente do Agendador de Tarefas, mas depois de ter tentado, não parece que você pode.

A única exceção parece ser %PATH% , então seria possível adicionar seu valor MyAppPath à coleção %PATH% em cada máquina, depois só chamar MyApp.exe do agendador de tarefas, onde a máquina ser capaz de resolver o caminho totalmente qualificado conforme necessário?

    
por 02.09.2011 / 13:09
1

On a side note, I did think about calling a BAT file and referencing the environment variable there, but that doesn't solve anything for me as the main issue is actually knowning whether the application (and the bat file too) is on C: or D: drives - inside the drive itself the path is the same.

%~d0 expandirá para a letra da unidade em que o arquivo em lote está localizado. ( %~dp0 para a unidade + diretório, e assim por diante. )

    
por 02.09.2011 / 13:51
1

resposta do tsvayer não funcionou bem para mim, em um computador com o Windows 7, mas me apontou no direção correta. O Agendador de Tarefas parece ser um serviço no meu computador; seu nome é Schedule ; o nome de exibição é Agendador de Tarefas .

Além de reiniciá-lo a partir do MMC Serviços , ele pode ser reiniciado com os seguintes comandos wmic executados a partir de uma janela do Prompt de Comando (com privilégios de administrador):

wmic service where "name='Schedule'" call StopService
wmic service where "name='Schedule'" call StartService

Você pode também reiniciar o serviço usando sc :

sc stop Schedule
sc start Schedule

Com base em tentativa e erro, parece suficiente desativar e reativar uma única tarefa, se isso for tudo o que você precisa afetar:

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE
    
por 04.02.2015 / 18:24
0

On a side note, I did think about calling a BAT file and referencing the environment variable there, but that doesn't solve anything for me as the main issue is actually knowing whether the application (and the bat file too) is on C: or D: drives - inside the drive itself the path is the same.

Expandindo a resposta do grawity, eu uso um processo em duas etapas. Isso me permite usar o caminho em outras instruções quando necessário.

SET WD=%~dp0
pushd %WD%

NOTA: pushd altera a unidade e o diretório. E se você quiser estar limpo, popd quando terminar.

    
por 14.03.2016 / 17:17