Acceso a variables de entorno en una tarea programada

14

Al configurar una tarea programada, para la sección de acción, intento acceder a una variable de entorno para la ubicación del ejecutable que deseo ejecutar. Esto se debe principalmente a que en una máquina el ejecutable podría estar en C: en otra podría estar en D: he verificado que si uso una ruta codificada, mi tarea programada se ejecuta, pero si cambio la acción para apuntar a "%MyAppPath%\MyApp.exe"la tarea no comenzará a sufrir un fallo de lanzamiento. He verificado que la variable de entorno está configurada.

¿Es posible dentro de la parte de acción (y directorio de trabajo) de la programación de tareas hacer referencia a una variable de entorno? Mi sintaxis es incorrecta.

En una nota al margen, pensé en llamar a un archivo BAT y hacer referencia a la variable de entorno allí, pero eso no me resuelve nada, ya que el problema principal es saber si la aplicación (y el archivo bat) también está en C: o D: unidades: dentro de la unidad, la ruta es la misma.

ACTUALIZACIÓN : Resulta que puedes usarlos con un reinicio de la máquina, pero tal vez hay una mejor manera

Paul Hadfield
fuente

Respuestas:

23

No necesita reiniciar la máquina. Debe finalizar Taskeng.exe y la próxima vez que se ejecute la tarea programada obtendrá un entorno actualizado.

tsvayer
fuente
Muchas gracias mcuh! He estado luchando con eso por días. He estado intentando reiniciar el servicio del Programador en vano en Win7 / Win2008 (necesito ejecutarlo como SYSTEM para reiniciarlo), ¡pero esto es mucho más simple!
Timur
2

Pensé que podría hacer referencia a variables de entorno desde el Programador de tareas, pero después de haberlo intentado, no parece que pueda.

La única excepción parece ser, %PATH%¿sería posible agregar su MyAppPathvalor a la %PATH%colección en cada máquina y luego simplemente llamar MyApp.exedesde el programador de tareas, donde la máquina podrá resolver la ruta totalmente calificada según sea necesario?

Stuart McLaughlin
fuente
1
Interesante, acabo de probar con% PATH% y no pude hacerlo funcionar. En ese momento noté un error tipográfico estúpido cuando actualicé% PATH%. Arreglé el error tipográfico y verifiqué que PATH estaba bien en un cuadro de DOS, pero la tarea programada aún informaba el problema, lo que indicaba que estaba viendo la versión "incorrecta" de% PATH%. Se necesitaba reiniciar para recoger el cambio (ya que no puede reiniciar el programador de tareas). En ese momento resultó que ahora podía usar mi variable de entorno original. Entonces, el resultado es que puede usar variables de entorno, pero se necesita un reinicio completo de la máquina para detectar cualquier cambio / nuevas variables de entorno
Paul Hadfield
Marcará esto como la respuesta correcta, ya que puede usarlos, pero si el programador de tareas se ha ejecutado antes de modificar el trabajo / agregar la referencia a una variable de entorno, necesitará reiniciar la máquina.
Paul Hadfield
2
Vea la respuesta de tsvayer: no necesita reiniciar la máquina. Solo el proceso del planificador de tareas.
Ben Challenor
1

En una nota al margen, pensé en llamar a un archivo BAT y hacer referencia a la variable de entorno allí, pero eso no me resuelve nada, ya que el problema principal es saber si la aplicación (y el archivo bat) también está en C: o D: unidades: dentro de la unidad, la ruta es la misma.

%~d0se expandirá a la letra de unidad de donde se encuentra el archivo por lotes. ( %~dp0para unidad + directorio, etc. )

usuario1686
fuente
1

La respuesta de tsvayer no funcionó para mí, en una computadora con Windows 7, pero me señaló en la dirección correcta. El Programador de tareas parece ser un servicio en mi computadora; su nombre es Schedule; el nombre para mostrar es el Programador de tareas .

Además de reiniciarlo desde la MMC de servicios , se puede reiniciar con los siguientes wmiccomandos ejecutados desde una ventana del símbolo del sistema (con privilegios de administrador):

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

Por supuesto, también puede reiniciar el servicio usando sc:

sc stop Schedule
sc start Schedule

Basado en prueba y error, parece suficiente deshabilitar y luego volver a habilitar una sola tarea, si eso es todo lo que necesita afectar:

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

En una nota al margen, pensé en llamar a un archivo BAT y hacer referencia a la variable de entorno allí, pero eso no me resuelve nada, ya que el problema principal es saber si la aplicación (y el archivo bat también) está en C: o D: unidades: dentro de la unidad, la ruta es la misma.

Ampliando la respuesta de Grawity, utilizo un proceso de dos pasos. Esto me permite usar la ruta en otras declaraciones cuando sea necesario.

SET WD=%~dp0
pushd %WD%

NOTA: pushdcambia la unidad y el directorio. Y si querías estar limpio, popdcuando hayas terminado.

Ricardo
fuente