忍者ブログ

ドラッグドロップ全ファイルループモジュール作成を生成AIでがんばった話

2023年12月22日
23:23 2023/12/21
ドラッグドロップ全ファイルループモジュールその2


前回、Bing AIを使ってVBScriptのソースコードを生成して、
そのまま実行したら良好な結果を得られた。

ドラッグドロップ標準モジュール


でも実際はそんな簡単じゃない。


今回はそのあたりの苦労した話。







前回投稿した内容は、何回もプロンプトを打ち直した結果、
そのまま使えるソースコードが出てきたので、プロンプトをメモした。

ブログ用に家で同じプロンプトを入れてみたところ、
なんと結果が違う。。。


Bing AIって、プロンプトに対して検索をかけて、HITした内容を踏まえて回答してくれる。
その検索処理がサーバーの状態によって変わるから!?


ぱっと見ちゃんと動きそうな内容ではあるけど、
まだ実装確認はできていない。。。


以下、プロンプトと出力されたソースコード。
1回目の出力結果は怪しいな。。。


ドラッグドロップ標準モジュールプロンプト


ドラッグドロップで全オブジェクトに対して以下の処理を行うVBScriptのソースコードを生成して。

・フォルダをドロップした場合はドロップした各フォルダ内の全csvファイルを対象にメイン処理を行う
・ファイルをドロップした場合は各ファイルを対象にメイン処理を行う
・指定なしの場合は、そのスクリプトのあるフォルダ内の全csvファイルを対象にメイン処理を行う

'-----------------------------------------------------------1回目
Option Explicit
Dim objFSO, objArgs, objFolder, objFile, objShell, strPath, strCSVPath
Set objShell = CreateObject("Shell.Application")
Set objArgs = objShell.NameSpace(0).Self.Verbs '【ツッコミ】これなにやってるかわかんねぇ。。。
If objArgs.Count = 0 Then
    strPath = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
Else
    strPath = objShell.NameSpace(0).Self.Path
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)
For Each objFile In objFolder.Files
    If LCase(objFSO.GetExtensionName(objFile)) = "csv" Then
        ' ファイルを処理するメイン処理を行う
    End If
Next
For Each objFile In objFolder.SubFolders
    For Each objFile In objFile.Files
        If LCase(objFSO.GetExtensionName(objFile)) = "csv" Then
            ' ファイルを処理するメイン処理を行う
        End If
    Next
Next
'-----------------------------------------------------------2回目(前回投稿)
Option Explicit
Dim objFSO, objArgs, strFolder, strFile, strPath, strExtension
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
    strFolder = objFSO.GetParentFolderName(WScript.ScriptFullName)
Else
    For Each strPath In objArgs
        If objFSO.FolderExists(strPath) Then
            ProcessFolder strPath
        ElseIf objFSO.FileExists(strPath) Then
            ProcessFile strPath
        End If
    Next
End If
Sub ProcessFolder(strFolderPath)
    Dim objFolder, objFile, colFiles
    Set objFolder = objFSO.GetFolder(strFolderPath)
    Set colFiles = objFolder.Files
    For Each objFile In colFiles
        ProcessFile objFile.Path
    Next
    Set colFiles = Nothing
    Set objFolder = Nothing
End Sub
Sub ProcessFile(strFilePath)
    strExtension = objFSO.GetExtensionName(strFilePath)
    If LCase(strExtension) = "csv" Then
        ' Do something with the file
    End If
End Sub
'-----------------------------------------------------------3回目
Option Explicit
Dim args
Set args = WScript.Arguments
If args.Count = 0 Then
    ' 指定なしの場合は、そのスクリプトのあるフォルダ内の全csvファイルを対象にメイン処理を行う
    Call Main(".")
Else
    Dim arg
    For Each arg In args
        Dim fso
        Set fso = CreateObject("Scripting.FileSystemObject")
        Dim f
        Set f = fso.GetFile(arg)
        If f.Attributes And 16 Then '【ツッコミ】Attributesは、ファイル名に環境依存文字があるとダメポ
            ' フォルダをドロップした場合は、ドロップした各フォルダ内の全csvファイルを対象にメイン処理を行う
            Call Main(f.Path)
        Else
            ' ファイルをドロップした場合は、各ファイルを対象にメイン処理を行う
            Call Main(f.Path)
        End If
    Next
End If
'【ツッコミ】「フォルダ内の全csvファイルを対象にメイン処理を行う」はどこへ行った?
Sub Main(path)
    ' メイン処理をここに記述する
    MsgBox path
End Sub

PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字