ドラッグドロップ全ファイルループモジュール作成を生成AIでがんばった話
2023年12月22日
23:23 2023/12/21
ドラッグドロップ全ファイルループモジュールその2
前回、Bing AIを使ってVBScriptのソースコードを生成して、
そのまま実行したら良好な結果を得られた。
「ドラッグドロップ標準モジュール」
でも実際はそんな簡単じゃない。
今回はそのあたりの苦労した話。
ドラッグドロップ全ファイルループモジュールその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