tareas tarea programador programadas programada programacion programa para minutos funciona ejecutar ejecuta desde crear cada bat automaticamente batch-file vbscript scheduled-tasks

batch file - programador - El archivo por lotes se ejecuta correctamente si se hace doble clic pero no se ejecuta en la tarea programada de Windows



programador de tareas windows 10 no funciona (2)

Tengo un archivo archive.pst en mi C: unidad que uso en Outlook para hacer una copia de seguridad de mi correo electrónico. Pero mi C: no está respaldada todas las noches. Así que me gustaría copiar el archivo .pst a mi unidad de red para que siempre se haga una copia de seguridad. No quiero que Outlook abra el archivo .pst directamente desde la unidad de red por una variedad de razones.

Por lo tanto, intento crear una tarea programada que copie mi archivo .pst en una ubicación de red todos los días. El archivo por lotes a continuación funciona perfectamente si se hace doble clic. Si intento ejecutar la tarea programada, solo se crea el archivo de registro. Outlook no se cierra y el archivo .pst no se copia. Intenté ejecutar con los privilegios más altos, pero eso no parece ayudar. Cualquier idea sería apreciada.

cscript.exe close_outlook.vbs ::This is my VBS Script ::Set Outlook = CreateObject("Outlook.Application") ::Outlook.Quit ping localhost > nul set idrive="//myserver/drive//Outlook Files/" set current="C:/myfolder/myuser/Documents/Outlook Files" echo Start Time of Copy: %time% >> %idrive%/Log.txt copy %current%/archive.pst %idrive%/archive.pst /y echo End Time of Copy: %time% >> %idrive%/Log.txt move %idrive%/Log.txt %idrive%/BackupLogs/Log.txt ren %idrive%/BackupLogs/Log.txt %date:~10,4%-%date:~4,2%-%date:~7,2%_log.txt cscript.exe open_outlook.vbs ::This is my VBS Script ::set shell = createobject("wscript.shell") ::shell.run "outlook.exe" EXIT


Al revisar las respuestas anteriores, he acortado el archivo por lotes solo al siguiente código. Esto funciona al hacer doble clic, pero no al programar una tarea. También probé la misma tarea moviendo el script .vbs a una unidad de red. Mismo resultado.

%SystemRoot%/System32/cscript.exe "C:/OutlookBackup/close_outlook.vbs" %SystemRoot%/System32/ping.exe -n 4 127.0.0.1>nul %SystemRoot%/System32/cscript.exe "C:/OutlookBackup/open_outlook.vbs"


1. Especifique todos los archivos en un archivo por lotes ejecutados como tarea programada con ruta completa.

Al hacer doble clic en un archivo de proceso por lotes, generalmente se ejecuta el archivo de proceso por lotes y el directorio de trabajo actual es el directorio del archivo por lotes. Pero cuando se ejecuta un archivo por lotes como tarea programada, el directorio system32 de Windows es el directorio de trabajo actual.

¿Está close_outlook.vbs y open_outlook.vbs en el directorio system32 de Windows?

No lo creo. Reemplace en el código del lote debajo de Path to/Script File dos veces por la ruta correcta.

2. Asigne valores de cadena con espacio a variables de entorno correctas.

variable=value es el parámetro para el conjunto de comandos. Con

set idrive="//myserver/drive//Outlook Files/"

asigna a la variable idrive el valor "//myserver/drive//Outlook Files/" con las comillas dobles incluidas. Esto resulta en la expansión de

echo End Time of Copy: %time% >> %idrive%/Log.txt

en la linea de comando

echo End Time of Copy: 19:21:53 >> 1>"//myserver/drive//Outlook Files/"/Log.txt

y esto no está bien, ¿verdad?

Correcto es:

set "idrive=//myserver/drive/Outlook Files"

También eliminé la segunda barra invertida después de la drive y la barra invertida al final de la ruta de la carpeta.

Como la variable de entorno contiene ahora la ruta con espacio (s) sin comillas dobles, las comillas dobles deben agregarse cuando el valor de la variable de entorno se utiliza concatenado con un nombre de archivo, vea el código de lote a continuación.

Hay una razón más por la que usar "variable=value" . Un espacio final no visible al final de la línea con el comando establecido en el archivo por lotes también se agrega al valor de la variable de entorno si las comillas dobles no se usan o se usan incorrectamente. Lea esta respuesta para obtener detalles sobre la asignación correcta de valores de cadena a variables de entorno.

3. Defina el ciclo de espera usando el comando ping mejor.

El comando

ping localhost > nul

produce una espera. Pero es mejor usar algo como

%SystemRoot%/System32/ping.exe -n 4 127.0.0.1>nul

como ahora la espera se determina con exactamente 3 segundos.

4. No inserte un espacio a la izquierda de los operadores de redirección> o >> para stdout.

Por qué esto no debería hacerse fue explicado por mí aquí en detalle.

5. Evite variables de entorno no definidas en el archivo por lotes en sí o en la cuenta del sistema.

Su archivo por lotes utiliza solo variables de entorno definidas en el archivo por lotes. Entonces este consejo aquí no es realmente necesario.

Sin embargo, muchos archivos de proceso por lotes que funcionan bien con doble clic pero no se ejecutan como tarea programada fallan porque el archivo de proceso por lotes depende de variables de entorno como PATH u otras relacionadas con la cuenta de usuario actual. Es seguro usar variables de entorno que existen para todas las cuentas, como SystemRoot .

Código de lote reelaborado

Aquí está su archivo de proceso por lotes con los cambios apropiados según los cuales las rutas de acceso de los dos archivos * .vbs deben configurarse correctamente antes de que el archivo por lotes (con suerte) funcione como tarea programada.

%SystemRoot%/System32/cscript.exe "Path to/Script File/close_outlook.vbs" %SystemRoot%/System32/ping.exe -n 4 127.0.0.1>nul set "idrive=//myserver/drive/Outlook Files" set "current=C:/myfolder/myuser/Documents/Outlook Files" echo Start Time of Copy: %time%>>"%idrive%/Log.txt" copy /B /Y /Z "%current%/archive.pst" "%idrive%/archive.pst" echo End Time of Copy: %time%>>"%idrive%/Log.txt" move "%idrive%/Log.txt" "%idrive%/BackupLogs/Log.txt" ren "%idrive%/BackupLogs/Log.txt" %date:~10,4%-%date:~4,2%-%date:~7,2%_log.txt %SystemRoot%/System32/cscript.exe "Path to/Script File/open_outlook.vbs" set "idrive=" set "current="