簡體   English   中英

批處理文件中使用 vbscript 命令的批處理腳本問題

[英]Issue with batch script with vbscript command in the batch file

我是批處理腳本和 vbscript 的新手。 我想要做的是將 .xlsx Excel 文件轉換為 .csv Excel 文件,在多個目錄中(遞歸)。 例如:

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。 我從這個線程Convert XLS to CSV on command line得到了這個代碼,我已經嘗試了前 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM