VBScriptでドラッグアンドドロップで複数ファイルのフルパスをCSVに書き出す

こんにちは!あつもり(@atumori17)です。

前回は「ドラッグアンドドロップしてファイル名とフルパスを取得する方法」を紹介しましたが、今回はその内容をさらに便利にしてお伝えしていこうと思います。

VBScriptでドラッグアンドドロップしてファイルのフルパスを取得する方法
日常業務の中でファイル名のフルパスが知りたいっていうケースがあると思います。そんな時にすぐにファイルのパスがわかると便利ですよね。WScriptオブジェクトのArgumentsプロパティを使うことで、ドラッグアンドドロップしたファイルのフルパスをコレクションとして取得することができます。

前回はドラッグアンドドロップしたファイルのフルパスとファイル名をInputBoxを使って表示させました。

この方法だとファイルが1つの場合は良いのですが、複数ファイルの場合ちょっと不便に感じることがあるかもしれません。例えばエクセルを使ってファイル名とフルパスの一覧表を作成する場合などです。

ファイルの数ぶんコピー&ペーストを繰り返さなければいけませんよね。う~ん。ちょっと何とかならないかな?ってことで今回は「ドラッグアンドドロップで複数ファイルのフルパスをCSVに書き出す方法」を紹介していきます。

 

スポンサーリンク

CSVファイルとはデータをカンマで区切ったテキストファイル

スクリプトの解説に入る前にCSVファイルとは何か?という説明をさせてください。

ひとことで言うと「カンマで区切られた値が入ったテキストファイル」です。CSVはComma Separated Valueの略になります。

CSVファイルはデータベースからデータをエクスポートしてエクセルで加工したり、逆にエクセルで作ったデータをデータベースにインポートしたりなんて時に使います。

このようにCSVファイルはさまざまなソフトと互換性があるので、データのやりとりをするのに使われることが多いファイル形式なんです。

下の画像はデータベースからエクスポートした「商品マスタ.csv」をエクセルで開いた例です。カンマで区切られたデータをセルごと分けて開いてくれます。CSVファイルはエクセルと相性がいいんですね。

ファイルパスをCSVファイルに書き出すスクリプト

CSVとは何かの説明が終わったところで、スクリプトの全文を紹介します。テキストエディタを開き、下記のコードを入力します。

全て入力し終わったら「ファイルのフルパスをCSVに書き出す.vbs」などのファイル名でデスクトップに保存します。

Option Explicit        

    'ドラッグアンドドロップで取得したファイルパスを変数に入れる
    Dim GetPathArray
    Set GetPathArray = WScript.Arguments     
    
    Dim objFSO      
    Set objFSO = CreateObject("Scripting.FileSystemObject")              
    
    Dim pt

    '配列の内容を出力
    For Each pt in GetPathArray      
                        
        '取得したファイル名
        Dim FileName
        FileName = objFSO.GetFileName(pt)
        
        '取得したフォルダパス
        Dim FolderPath      
        FolderPath = objFSO.GetParentFolderName(pt)
       
        'カンマで連結させてテキストファイルに出力
        OutputText pt & "," & FolderPath & "," & FileName             
    Next    
    
    Set objFSO = Nothing
    
    MsgBox "CSVファイルの書き出しが終わりました"

'テキストファイルへ出力
Function OutputText(ByVal strMsg)

    Dim objFSO
    Dim objText
    
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    Set objText = objFSO.OpenTextFile("C:\work\ファイルパス.csv", 8, True)

    objText.write strMsg    
    objText.write vbCrLf

    objText.close
    
    Set objFSO = Nothing
    Set objText = Nothing 

End Function

プログラムコードの解説

GetParentFolderNameメソッドで親フォルダのパスを取得する

今回はCSVファイルに書き出すということで、せっかくですので親フォルダのパスも取得しようと思います。親フォルダとは指定したファイルが入っているフォルダを指します。

以下の画像を見てください。「マニュアル1.xls」を基準に考えると、親フォルダは「勉強会資料」、親フォルダのパスは「C:\work\勉強会資料」となります。

親フォルダのパスを取得するにはファイルシステムオブジェクトのGetParentFolderNameメソッドを使います。

ファイルシステムオブジェクト.GetParentFolderName(ファイルパス)

ファイルパスには対象ファイルのフルパスを指定します。

自作関数に引数を渡してCSVファイルとして書き出す

OutputText関数は自作した関数です。この関数は引数で渡した値をテキストファイルに書き出すというものです。上記のプログラムコードの31行目から48行目になります。

自作関数のOutputText関数については過去の記事で詳しく紹介していますので参考にしてみてください。

VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
VBScriptでファイルシステムオブジェクトを使ってシンプルにテキストファイルに保存するテクニックの紹介です。せっかくWEBスクレイピングでWEBサイトから必要な情報を取得しても、保存する場所がなければ取得したデータを使うことはできないからです。

今回のアプリケーションではCSVファイルに書き出すので、OutputText関数に渡すデータはカンマで連結させたデータになります。ここではファイルのフルパス、親フォルダのパス、ファイル名をカンマで連結させています。

上記のプログラムコードの23、24行目になります。

 'カンマで連結させてテキストファイルに出力
  OutputText pt & "," & FolderPath & "," & FileName      

気をつけなければいけないのが、過去の記事で紹介しているOutputText関数は拡張子を.txtとて書き出していましたが、今回はCSVファイルですので拡張子を.csvにします。上記のプログラムコードの38行目になります。

Set objText = objFSO.OpenTextFile("C:\work\ファイルパス.csv", 8, True)

 

プログラムの説明は以上になります。

ドラッグアンドドロップでのCSV書き出しを実行してみる

テスト用のファイルを作成してドラッグアンドドロップする

まずはテスト用のファイルを作ります。今回は「C:\work」フォルダの下に「勉強会資料」フォルダを作り、マニュアル1~5.xlsを作りました。

では実際に起動してみます。デスクトップにある「ファイルのフルパスをCSVに書き出す.vbs」にテスト用に作成したエクセルファイルをドラッグアンドドロップします。

メッセージボックスが表示されたらOKボタンを押します。

「C:\work」フォルダの下にファイルパス.csvファイルができました。

書き出されたCSVファイル開いてみる

それでは書き出されたCSVファイルをテキストエディタで開いてみましょう。開いたファイルを見てみると、ドラッグアンドドロップしたファイルの

  • フルパス
  • 親フォルダのパス
  • ファイル名

カンマで区切られて書き出されていますね。

せっかくなのでエクセルでも開いてみましょう。おお~!いい感じにセルごとにデータが分かれましたっ

まとめ

いかかでしたか?今回の内容をまとめると以下のようになります。

  • CSVファイルはカンマで区切られた値が入ったテキストファイルでエクセルと相性がいい
  • GetParentFolderNameメソッドで親フォルダのパスを取得できる

以上になりますっ。お疲れ様でした~。

連載目次:初心者でも簡単!VBScriptでWindows効率化

Windowsを操作できるプログラミング言語「VBScript」を使って、日々の業務効率化! テキストエディタで簡単にできますので初心者にもおすすめです。
  1. 初心者でも簡単プログラムでWindowsの効率化!VBScriptをやってみよう
  2. VBScriptで複数のファイル・フォルダ・アプリケーションをダブルクリック一発で開く方法
  3. VBScriptで曜日ごとに起動するファイルやフォルダ、アプリケーションを変える
  4. VBScriptでドラッグアンドドロップしてファイルのフルパスを取得する方法
  5. VBScriptでドラッグアンドドロップで複数ファイルのフルパスをCSVに書き出す

タイトルとURLをコピーしました