在batch file中用批处理脚本与vbscript命令问题

我是批处理脚本和VBScript新手。 我想要做的是将.xlsx Excel文件转换为.csv Excel文件,在多个目录(recursion)。 例如:

Main directory subdirectory1 file1.xlsx file2.xlsx subdirectory2 file3.xlsx file4.xlsx 

我已经做了这个批处理脚本:

 FOR /r %%a in (*.xlsx) do ( SET filename=%%a ExceltoCSV.vbs %filename% *.csv ) 

for循环内部是ExceltoCSV.vbs。 我从这个线程得到了这个代码在命令行上将XLS转换为CSV ,并且我已经尝试了前2个答案(两者都不需要下载任何东西)。

  if WScript.Arguments.Count < 2 Then WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv" Wscript.Quit End If Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0)) oBook.SaveAs WScript.Arguments.Item(1), 6 oBook.Close False oExcel.Quit WScript.Echo "Done" 

错误是说ExceltoCSV.vbs文件无法访问。 但是,我相信批处理脚本正在工作,例如它会说:

 SET filename=C:\folder\subfolder\test1.xlsx 

那么它调用:

 ExceltoCSV.vbs C:\folder\subfolder\test1.xlsx *.csv 

我不确定是什么问题,我目前很困惑。

VBS需要与BAT文件位于同一个目录中。

问题是FOR循环中的变量扩展规则意味着filename不会被设置为当前的文件变量值; 只需使用%%a代替:

 FOR /r %%a in (*.xlsx) do ( ExceltoCSV.vbs "%%a" "%%~dpna.csv" ) 

您正在将字符串"*.CSV"传递给不能工作的脚本, %%~dpna.csv%%a的文件名并将扩展名更改为.CSV

引号是为了允许路径中的空间。

您正在使用VBScript进行转换。 为什么不只是用它来迭代你的文件夹呢? 那么你不必担心从BAT中调用VBS并传递适当的参数。

 Set objFSO = CreateObject("Scripting.FileSystemObject") Set oExcel = CreateObject("Excel.Application") DoFolder "c:\mainfolder" oExcel.Quit Sub DoFolder(strFolder) ' Recursively process each subfolder... For Each objSubFolder In objFSO.GetFolder(strFolder).SubFolders DoFolder objSubFolder.Path Next ' Convert any XLSX files... For Each objFile In objFSO.GetFolder(strFolder).Files If StrComp(objFSO.GetExtensionName(objFile.Name), "xlsx", vbTextCompare) = 0 Then strNewName = Left(objFile.Path, Len(objFile.Path) - 4) & "csv" ' Convert... Set oBook = oExcel.Workbooks.Open(objFile.Path) oBook.SaveAs strNewName, 6 oBook.Close False End If Next End Sub