我的C:盘上有一个archive.pst文件,我在outlook中使用它来备份我的电子邮件。但我的C:每晚都没有备份。因此,我想将.pst文件复制到我的网络驱动器,以便始终备份。我不希望outlook出于各种原因直接从网络驱动器打开.pst文件。
因此,我正在尝试创建一个计划任务,每天将我的.pst文件复制到网络位置。如果双击,下面的批处理文件将完美运行。如果我尝试运行计划任务,则只创建日志文件。 Outlook不会关闭,并且不会复制.pst文件。我尝试过以最高权限运行,但这似乎没有帮助。任何想法都将不胜感激。
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
答案 0 :(得分:0)
双击批处理文件通常会导致运行批处理文件,当前工作目录是批处理文件的目录。但是,当按批处理任务运行批处理文件时,Windows的system32目录是当前工作目录。
Windows的system32目录中是close_outlook.vbs
和open_outlook.vbs
吗?
我不这么认为。通过正确的路径将Path to\Script File
下面的批次代码替换为两次。
variable=value
是命令 set 的参数。与
set idrive="\\myserver\drive\\Outlook Files\"
您为变量 idrive
分配了包含双引号的值"\\myserver\drive\\Outlook Files\"
。这导致了
echo End Time of Copy: %time% >> %idrive%\Log.txt
在命令行中
echo End Time of Copy: 19:21:53 >> 1>"\\myserver\drive\\Outlook Files\"\Log.txt
这是不对的,不是。
正确的是:
set "idrive=\\myserver\drive\Outlook Files"
我在drive
之后删除了第二个反斜杠,并在文件夹路径末尾删除了反斜杠。
由于环境变量现在包含空格(不带双引号)的路径,因此必须添加双引号,其中环境变量的值与文件名串联使用,请参阅下面的批处理代码。
使用"variable=value"
还有一个原因。如果未使用或使用错误的双引号,则在批处理文件中使用命令 set 的行末尾不可见的尾随空格也会附加到环境变量的值。有关将字符串值正确分配给环境变量的详细信息,请阅读this answer。
命令
ping localhost > nul
产生等待。但最好使用像
这样的东西%SystemRoot%\System32\ping.exe -n 4 127.0.0.1>nul
现在等待时间恰好是3秒。
我为here详细解释了为什么不应该这样做。
您的批处理文件仅使用批处理文件本身定义的环境变量。所以这里的建议并不是真的需要。
但是,许多批处理文件在双击时工作正常但未按计划任务运行失败,因为批处理文件依赖于环境变量,如 PATH 或其他与当前用户帐户相关的变量。使用适用于所有帐户的环境变量是安全的,例如 SystemRoot 。
这是您的批处理文件,其中包含相应的更改,在批处理文件(希望)作为计划任务工作之前,必须正确设置两个* .vbs文件的路径。
%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="
答案 1 :(得分:0)
在查看之前的回复时,我已将批处理文件缩短为仅下面的代码。这在双击时有效,但在安排任务时则无效。我也尝试过将.vbs脚本移动到网络驱动器的相同任务。同样的结果。
%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"