2016-11-08 11 views
0

私はバッチファイルを作成しており、その一部は.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 abc.csv 

CSV2XLSX.vbs C:\Users\Data\ktq\abc.csv 

としては、元のスレッドで説明し、それは以下のようにして、うまく動作しません。

これは、パスを更新する必要があるフォルダを移動するかのような苦痛です。私は、ファイルを正しく見つけることによって上記のコマンドを取るようにvbsを強制することができる方法はありますか?または問題のファイルから絶対パスを取得して何とかそれを渡すことはできますか?どんな助けも素晴らしいだろう!

答えて

1

次のスクリプトは、実行中の.vbsスクリプトのパスを提供します。このようなスクリプトを使用して、ファイルのパスを判断することができます。
だから、例えば、あなたのスクリプトはC:\Users\Data\ktq\yourscript.vbs", the script bellow will output strMainPathに格納され、場合as C:\ Users \ユーザーデータ\ 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ファイルを検索すると、すべてを見つけることができます。

Print strMainPath & "\myFiles\" 

はあなたのコードにそれを適応、それはのようなものでなければなりません:あなたは、ファイルの別のレベルを持っている場合は、C:\Users\Data\ktq\myFiles\であなたもあなただけこれで上記のコードのPrint一部を変更した場合は行ってもいいだろうと言いますこれは:

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 
関連する問題