Acessando variáveis ​​de ambiente em uma tarefa agendada

14

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. Isso ocorre principalmente porque em uma máquina o executável pode estar em C: em outro, em D: verifiquei que, se eu usar um caminho codificado, minha tarefa agendada será executada, mas se eu alterar a ação para apontar para "%MyAppPath%\MyApp.exe"a tarefa não começará a sofrer uma falha no lançamento. Eu verifiquei que a variável de ambiente está configurada.

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

Em uma nota lateral, pensei em chamar um arquivo BAT e referenciar a variável de ambiente lá, mas isso não resolve nada para mim, pois 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.

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

Paul Hadfield
fonte

Respostas:

23

Você não precisa reiniciar o computador. Você deve encerrar o Taskeng.exe e, na próxima vez em que a tarefa agendada for executada, ele obterá um ambiente atualizado.

tsvayer
fonte
Muito obrigado, mcuh! Eu tenho lutado com isso por dias. Eu tenho tentado reiniciar o serviço Agendador sem sucesso no Win7 / Win2008 (preciso executar como SYSTEM para reiniciá-lo), mas isso é muito mais simples!
Timur
2

Eu pensei que você poderia fazer referência a variáveis ​​de ambiente do Agendador de tarefas, mas, depois de tentar, não parece que você pode.

A única exceção parece ser %PATH%a seguinte: seria possível adicionar seu MyAppPathvalor à %PATH%coleção em cada máquina e, em seguida, basta chamar MyApp.exedo agendador de tarefas, onde a máquina poderá resolver o caminho completo conforme necessário?

Stuart McLaughlin
fonte
1
Interessante, tentei apenas com% PATH% e não consegui fazê-lo funcionar. Naquele momento, notei um erro estúpido ao atualizar o% PATH%. Corrigi o erro de digitação e verifiquei que PATH estava OK em uma caixa do DOS, mas a tarefa agendada ainda relatava o problema - indicando que estava vendo a versão "ruim" de% PATH%. Era necessário reiniciar para pegar a alteração (como você não pode reiniciar o agendador de tarefas). Nesse ponto, agora eu poderia usar minha variável de ambiente original. Assim, o resultado é que você pode usar o ambiente variablees, mas uma reinicialização da máquina completa é necessária para pegar quaisquer alterações / novas variáveis de ambiente
Paul Hadfield
Marcará isso como a resposta correta, pois você poderá usá-los, mas se o agendador de tarefas tiver sido executado antes de você modificar o trabalho / adicionar a referência a uma variável de ambiente, será necessário reiniciar a máquina.
Paul Hadfield
2
Veja a resposta do tsvayer - você não precisa reiniciar a máquina. Apenas o processo do agendador de tarefas.
Ben Challenor
1

Em uma nota lateral, pensei em chamar um arquivo BAT e referenciar a variável de ambiente lá, mas isso não resolve nada para mim, pois 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.

%~d0será expandido para a letra da unidade onde o arquivo em lotes está localizado. ( %~dp0para o diretório drive + e assim por diante. )

user1686
fonte
1

A resposta do tsvayer não funcionou muito bem para mim, em um computador executando o Windows 7, mas me indicou a direção certa. O Agendador de tarefas parece ser um serviço no meu computador; é o nome é Schedule; o nome para exibição é Agendador de tarefas .

Além de reiniciá-lo no MMC de serviços , ele pode ser reiniciado com os seguintes wmiccomandos executados em 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

Obviamente, você também pode reiniciar o serviço usando sc:

sc stop Schedule
sc start Schedule

Com base na tentativa e erro, parece suficiente desabilitar e reativar uma única tarefa, se é tudo o que você precisa afetar:

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE
Kenny Evitt
fonte
0

Em uma nota lateral, pensei em chamar um arquivo BAT e referenciar a variável de ambiente lá, mas isso não resolve nada para mim, pois 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.

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

SET WD=%~dp0
pushd %WD%

NOTA: pushdaltera a unidade e o diretório. E se você queria estar limpo, popdquando terminar.

Richard
fonte