.bat/.vbs 脚本手动运行,但不从任务计划程序运行

.bat/.vbs 脚本手动运行,但不从任务计划程序运行

我在任务管理器中设置了一个任务,调用一个.bat 文件(然后调用一个.vbs)来处理 4 个简单的步骤:

.bat文件:

步骤 1:从网络上抓取一些 .xlsx 文件,并将其复制到本地并附加日期戳

COPY "\\prime\d$\Cognos Reports\eMoney\Client_Ethic.xlsx" "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_Client_Ethic.xlsx"
COPY "\\prime\d$\Cognos Reports\eMoney\InvestmentDepositAccounts_Ethic.xlsx" "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_InvestmentDepositAccounts_Ethic.xlsx"
COPY "\\prime\d$\Cognos Reports\eMoney\LiabilityAccounts_Ethic.xlsx" "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_LiabilityAccounts_Ethic.xlsx"
COPY "\\prime\d$\Cognos Reports\eMoney\Relationship_Ethic.xlsx" "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_Relationship_Ethic.xlsx"

步骤 2:调用 .vbs 文件将目录中的所有 .xlsx 文件转换为 .csv

调用:FOR /f "delims=" %%i IN ('DIR.xlsx/b') DO to-csv.vbs "%%i" "%%~ni.csv"

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")
oExcel.DisplayAlerts = False

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit

步骤 3:通过 WS SFTP Pro 发送 .csv 文件,并将发送的 .csv 文件移动到存档文件夹

"C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe" -s "local:D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_*.csv" -d "eMoney:/Ethic:/" -move "D:\Cognos Reports\FTPOUT\eMoney Archive\" -quiet

步骤 4:删除 .xlsx 文件

DEL "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_Client_Ethic.xlsx"
DEL "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_InvestmentDepositAccounts_Ethic.xlsx"
DEL "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_LiabilityAccounts_Ethic.xlsx"
DEL "D:\Batch\%DATE:~4,2%%DATE:~7,2%%DATE:~-4%_Relationship_Ethic.xlsx"

当我以管理员身份运行 .bat 手动运行该过程时,它运行正常(所以代码不应该是问题所在)。但是,当我尝试使用相同的管理员帐户从任务计划程序运行它时,它完成了步骤 1,然后只是挂在运行状态,没有任何错误。所以我可以看到 xlsx 文件被拉过来,但没有转换 csv 文件。

我甚至尝试将任务拆分成 4 个单独的 bat 文件,这样可以保证在尝试下一步之前完成每个步骤……这样它就不会在文件通过网络传输之前尝试转换。我还尝试将任务更改为运行 cmd 并提供 /c 作为参数。结果相同。

我们在安装 Office 时遇到了一些问题,并尝试了几次全新安装,但仍然无法通过任务计划程序运行。我们尝试了 Excel 2016 和 Office 365,并禁用了自动更新。

如果这很重要的话,服务器是 2012R2。我对此很困惑...

答案1

因此,这显然是尝试使用特定版本的 MS Windows 通过任务计划程序执行特定版本的 MS Office 应用程序时控制台权限的一个已知问题。显然我们的服务器符合这一要求,运行 2012 R2 并尝试 Office 2016 和 365。

解决方案是添加以下文件夹:c:\windows\syswow64\config\systemprofile\desktop,它将完美运行。

相关内容