2023年6月12日月曜日

【VBScript】指定したフォルダ内のファイル情報をCSVに一覧で出力して保存する。

event_note6月 12, 2023

概要

指定したフォルダ内の以下の情報をCSVファイルに出力します。

  • ファイルの作成日
  • 更新日
  • ファイル名
  • ファイルパス 

ソース

Dim fso, folder, files, file
Dim csvFilePath, csvFile, suffix

' WScript オブジェクトを作成
Set WshShell = CreateObject("WScript.Shell")

' デスクトップのパスを取得
desktopPath = WshShell.SpecialFolders("Desktop")

' フォルダ選択ダイアログを表示して、処理対象のフォルダを取得
Set shell = CreateObject("Shell.Application")
Set selectedFolder = shell.BrowseForFolder(0, "フォルダを選択", 0, desktopPath)

' フォルダが選択された場合のみ処理を実行
If Not selectedFolder Is Nothing Then
    ' 出力するCSVファイルのパス
    csvFilePath = "output.csv"

	' サフィックスの作成
    suffix = FormatDateTime(Now, vbGeneralDate)
    suffix = Replace(suffix, "/", "")
    suffix = Replace(suffix, ":", "")
    suffix = Replace(suffix, " ", "")

    ' サフィックスをCSVファイル名に追加
    csvFilePath = Left(csvFilePath, Len(csvFilePath) - 4) & "_" & suffix & ".csv"

    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' 指定したフォルダ内のファイルを取得
    Set folder = fso.GetFolder(selectedFolder.Self.Path)
    Set files = folder.Files

    ' CSVファイルを作成または既存のファイルを上書き
    Set csvFile = fso.CreateTextFile(csvFilePath, True)

    ' ヘッダ行をCSVファイルに書き込む
    csvFile.WriteLine("作成日,更新日,ファイル名,ファイルパス")

    ' ファイルごとに情報を取得してCSVファイルに書き込む
    For Each file In files
        ' ファイルの作成日、更新日、ファイル名、ファイルパスを取得し、CSVファイルに書き込む
        csvFile.WriteLine(FormatDateTime(file.DateCreated, 2) & "," & FormatDateTime(file.DateLastModified, 2) & "," & file.Name & "," & file.Path)
    Next

    ' CSVファイルを閉じる
    csvFile.Close

    ' メッセージボックスで完了を表示
    MsgBox "CSVファイルの出力が完了しました。"

    ' ファイルシステムオブジェクトを解放
    Set fso = Nothing
End If

補足

 もうちょっと補足しますと、
・フォルダ選択のダイアログのデフォルトはデスクトップにしてあります。
・選択したフォルダ内のファイルの情報をCSVに出力しています。
・出力したCSVファイル名の後ろに、日時を付け加えています。
・ファイルは指定したフォルダ内直下のもののみです。再帰的に深掘りはしていません。