如何在批处理文件中使用绝对路径或强制vbs不需要路径?

时间:2016-11-08 13:57:44

标签: csv vbscript

我正在编写一个批处理文件,其中一部分将.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通过正确查找文件来接受上面的命令,或者我可以从有问题的文件中获取绝对路径并以某种方式传递它?任何帮助都会很棒!

1 个答案:

答案 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