我正在编写一个批处理文件,其中一部分将.csv转换为.xlsx。我已经能够合并这篇文章的解决方案:
Convert .CSV to .XLSX using command line
Dim file, WB
With CreateObject("Excel.Application")
On Error Resume Next
For Each file In WScript.Arguments
Set WB = .Workbooks.Open(file)
WB.SaveAs Replace(WB.FullName, ".csv", ".xlsx"), 51
WB.Close False
Next
.Quit
End With
它运行良好,但唯一的问题是我必须将绝对路径传递到批处理文件才能使其工作,如下所示:
CSV2XLSX.vbs C:\Users\Data\ktq\abc.csv
正如原始主题中所解释的那样,只有执行以下操作才能起作用:
CSV2XLSX.vbs abc.csv
这有点痛苦,好像我移动了我需要更新路径的文件夹。有没有什么办法可以强制vbs通过正确查找文件来接受上面的命令,或者我可以从有问题的文件中获取绝对路径并以某种方式传递它?任何帮助都会很棒!
答案 0 :(得分:1)
以下脚本将为您提供正在运行的.vbs
脚本的路径。您可以使用此类脚本来确定文件的路径
因此,例如,如果您的脚本存储在C:\Users\Data\ktq\yourscript.vbs", the script bellow will output
strMainPath as
C:\ Users \ Data \ ktq`中(没有尾部反斜杠):
Dim objShell : Set objShell = CreateObject("Wscript.Shell")
Dim strPath : strPath = Wscript.ScriptFullName
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.GetFile(strPath)
Dim strMainPath : strMainPath = objFSO.GetParentFolderName(objFile)
'Cleaning no longer needed objects
Set objFile = Nothing
Set objFSO = Nothing
Set objShell = Nothing
Print strMainPath
因此,假设您的脚本与.csv
文件位于同一文件夹中,您将能够找到所有这些文件。如果您有其他级别的文件,例如在C:\Users\Data\ktq\myFiles\
中,如果您只是更改上面代码的Print
部分,那么您也会很高兴:
Print strMainPath & "\myFiles\"
使其适应您的代码,它应该是这样的:
Dim objShell : Set objShell = CreateObject("Wscript.Shell")
Dim strPath : strPath = Wscript.ScriptFullName
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.GetFile(strPath)
Dim strMainPath : strMainPath = objFSO.GetParentFolderName(objFile)
'Cleaning no longer needed objects
Set objFile = Nothing
Set objFSO = Nothing
Set objShell = Nothing
Dim file, WB
With CreateObject("Excel.Application")
On Error Resume Next
For Each file In WScript.Arguments
Set WB = .Workbooks.Open(strMainPath & "\" & file)
WB.SaveAs Replace(WB.FullName, ".csv", ".xlsx"), 51
WB.Close False
Next
.Quit
End With