2016-11-08 70 views
0

我正在寫一個批處理文件,它的一部分將.csv轉換爲.xlsx。我已經能夠整合來自這篇文章的解決方案:如何在批處理文件中使用絕對路徑或強制vbs不需要路徑?

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

以下腳本將爲您提供運行.vbs腳本的路徑。您可以使用此腳本來確定文件的路徑。
所以,如果,例如,您的腳本存儲在C:\Users\Data\ktq\yourscript.vbs", the script bellow will output strMainPath as C:\用戶\ 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