Necesito configurar una tarea programada de Windows. Acepta 1 parámetro / argumento que es una ruta y puede contener espacios. Mi tarea programada no funciona: "rompe" el parámetro en el primer espacio.
Si lo ejecuto en el símbolo del sistema, puedo ajustar el argumento en "" y funciona bien, sin embargo, esto no funciona en la IU de tareas programadas.
p.ej C:\Program Files\xyz\FTP File Transfer\FTPFileTransferTask.exe "C:\Program Files\xyz\The Interface\Folder Path"
He intentado ajustar el argumento con "" '' [] () y he intentado rellenar los espacios con% 20, ~ 1, etc. sin suerte.
Sé de una solución para hacer un archivo bat y usar "" alrededor de mi argumento, pero no quiero agregar más complejidad.
Lo probé en Windows 7 y Windows 2008 Server y ambos fallaron. Parece que no hay discusiones sobre esto?
fuente
Respuestas:
He trabajado con tareas programadas y generalmente pones los argumentos en su propio cuadro de entrada de texto. Esto significa que apunta la acción al campo del programa / script apunta al exe y el campo "Agregar argumentos" debe tener todos los parámetros. ( fuente )
Creo que este comportamiento se agregó para evitar espacios en la ruta del archivo al exe que causa problemas.
Hago esto todo el tiempo con los scripts de PowerShell. Aquí hay un ejemplo:
fuente
Tenga en cuenta el uso de
'
en la ruta de un archivo a ejecutar.fuente
En este caso, podría solucionar el problema pasando el parámetro de ruta en formato 8.3.
Puede descubrir el formato 8.3 para su ruta abriendo un símbolo del sistema y emitiendo el comando
dir /x
en la raíz de su unidad.Deberías ver una entrada similar a
para su directorio de Archivos de programa.
Luego cambie el directorio a Archivos de programa con
cd "Program Files
"seguido de cd xyz y emitadir /x
nuevamente para encontrar el nombre del formato 8.3 para" La interfaz ", y así sucesivamente.Su ruta final para el ejemplo que dio se vería así:
fuente
Tuve un problema similar con VLC, que estaba usando en Windows XP. El truco es encerrar el argumento del
cmd
comando entre comillas dobles.Aquí hay un ejemplo de lo que usé (programar una grabación a las 15:00):
Tenga en cuenta el uso de comillas dobles justo después
/c
y al final del comando (después.mpg
). El argumento con espacios en este caso es"C:\Documents and Settings\..."
fuente
Una forma de lograr esto es usando powershell desde la línea de comandos.
Agregue este código a un archivo llamado MyModule.psm1.
Luego, desde la línea de comando O un archivo ps1, puede ejecutar:
Cada elemento respectivo en la matriz de parámetros de tareas se pasaría como $ (Arg0), $ (Arg1) y $ (Arg2).
fuente
Configure su tarea programada de la siguiente manera
cmd / c C: \ Archivos de programa \ xyz \ FTP File Transfer \ FTPFileTransferTask.exe "C: \ Archivos de programa \ xyz \ The Interface \ Folder Path"
fuente
Podría ayudar a comprender el problema desde una perspectiva diferente. Digamos que usted es el programador a quien se le ha encargado agregar un programador de tareas a Windows. ¿Como lo harias? Tiene varios problemas con los que lidiar: si la tarea se ejecuta como alguien que no sea el usuario conectado, ¿debería molestar al usuario conectado con alguna ventana emergente de error? ¿Qué sucede si no hay un usuario conectado en el momento en que se ejecuta la tarea? ¿Qué pasa con la diferencia entre un programa GUI y un programa de consola? Las GUI no tienen stdin, stdout y stderr; el concepto no tiene sentido en ellos. ¿Qué pasa con los programas internos o externos a COMMAND.COM/CMD.EXE? ¿U otros motores de secuencias de comandos? ¿Qué pasa con las rutas con espacios en el nombre del comando? ¿O en los parámetros (opciones / argumentos)? (Como estás tratando de lidiar ahora ...)
Si bien no estoy 100% seguro acerca de los detalles internos o técnicos completos en este caso, las respuestas parecen ser ... Las tareas se ejecutan en una sesión aislada, no interactiva, que no puede interactuar con el usuario actualmente conectado (si corresponde). ); Se ejecuta esperando que no haya salida de la consola, ya que no es interactivo, no puede interrumpir a cualquier usuario conectado para mostrar la salida, de todos modos (y si hay salida, stdin es el bitbucket / NULL, stdout y stderr se registran en la instalación de registro del sistema); Los espacios se manejan evitando el problema: el nombre del comando se toma EXACTAMENTE tal como está y los parámetros que se pasan al comando se especifican en otro cuadro de entrada en las propiedades de la tarea.
Lo que significa es que su tarea debe ejecutarse como si fuera un demonio (en el mundo Un * x). Todo es estático y preciso. El nombre del comando es el nombre real del comando, sin ningún parámetro. Esto a menudo incluye la ejecución de intérpretes de comandos / scripts, como CMD.EXE! Los parámetros, si los hay, se especifican en otra parte y deben conocerse cuando configura la tarea (es decir, no puede cambiar los parámetros "sobre la marcha"). Y así.
Entonces, si desea incluir parámetros, debe usar la sección de parámetros para especificar los parámetros. El programador de tareas nointente analizar el nombre del comando para dividirlo en "comando" y "argumentos" como lo hacen los programas de línea de comandos. Simplemente lo trata como un gran nombre de comando completo. Del mismo modo, si desea parámetros variables, como usar% 1 ..% n en archivos BATCH, no puede hacerlo desde el Programador de tareas; Tendrás que encontrar otra manera. (Tenga en cuenta que tampoco puede usar variables de entorno, ya que el entorno pasado al programa depende del entorno con el que se inicia la tarea, NO del entorno "actual"). Puede usar un archivo temporal para guardar los parámetros, pero ya que debe especificar un nombre de archivo estático en las propiedades de la tarea, ¿qué sucede cuando está en una red con 5000 usuarios y cuatro de ellos intentan ejecutar la misma tarea al mismo tiempo? Todos se golpean entre sí tratando de escribir en el mismo archivo temporal al mismo tiempo, probablemente tampoco lo que querías. (También hay soluciones a este problema, pero eso va demasiado lejos del alcance de esta pregunta y respuesta ...)
Entonces, la respuesta final: en el caso simple, la ruta que desea pasar como parámetro es estática y no cambia, debe especificar los parámetros en la propiedad de Tarea apropiada (Argumentos) en lugar de en el cuadro Programa / Script , o use un archivo por lotes. En un caso más complejo, deberá hacer la pregunta correcta o investigar cómo funcionan los demonios y cómo usar el bloqueo / semáforos y demás para la comunicación entre procesos (IPC).
Buena suerte.
fuente
Microsoft tiene un boletín sobre esto: https://support.microsoft.com/en-us/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create -it-a
Básicamente dice usar la secuencia "\" antes y después del nombre del archivo por lotes.
fuente