我在任务管理器中设置了一个任务,调用一个.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,它将完美运行。