忍者ブログ

ドラッグドロップ全ファイルループモジュールその3 進捗表示機能搭載

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

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


この内容に対して、過去に作った進捗状況をファイル名で表示するモジュールを組み合わせるべく
またしてもBing AIを使って改良を試みた。




プロンプトは以下の通り。

以下の2つのプログラムを組み合わせて、ドラッグドロップによる処理の進捗を表示するVBScriptのソースコードを生成して。
'ドラッグドロップ
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
'プログレスバー
dim text:text ="400件/750件"
call outputprogress(text)
sub outputProgress(text)
    call deletePrgrsFile
    call makePrgrsFile(text)
end sub
'------------------------------
' メイン処理
'------------------------------
Sub  makePrgrsFile(text)
    dim myPath : myPath = Wscript.scriptFullname
    dim yPos : yPos = instrrev(myPath , "\")
    dim strFile: strFile = left(myPath,yPos) & "VBS進行率:" & text & ".prgrs"
    dim objFS:    Set objFS = CreateObject("Scripting.FileSystemObject")    
    dim obfFile :    Set obfFile = objFS.CreateTextFile(strFile)    ' ファイル作成
    set objFS = nothing
    set obfFile = nothing
end sub
sub deletePrgrsFile()
    on error resume next
    dim myPath : myPath = Wscript.scriptFullname
    dim yPos : yPos = instrrev(myPath , "\")
    dim tarFile:tarFile = left(myPath,yPos) & "*.prgrs"
    
    with CreateObject("Scripting.FileSystemObject")
        .DeleteFile tarFile
    end with
end sub


得られた結果はこちら。
'-----------------------------------------------------------結果
'ドラッグドロップ
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
'プログレスバー
dim text:text ="400件/750件"
call outputprogress(text)
sub outputProgress(text)
    call deletePrgrsFile
    call makePrgrsFile(text)
end sub
'------------------------------
' メイン処理
'------------------------------
Sub  makePrgrsFile(text)
    dim myPath : myPath = Wscript.scriptFullname
    dim yPos : yPos = instrrev(myPath , "\")
    dim strFile: strFile = left(myPath,yPos) & "VBS進行率:" & text & ".prgrs"
    dim objFS:    Set objFS = CreateObject("Scripting.FileSystemObject")    
    dim obfFile :    Set obfFile = objFS.CreateTextFile(strFile)    ' ファイル作成
    set objFS = nothing
    set obfFile = nothing
end sub
sub deletePrgrsFile()
    on error resume next
    dim myPath : myPath = Wscript.scriptFullname
    dim yPos : yPos = instrrev(myPath , "\")
    dim tarFile:tarFile = left(myPath,yPos) & "*.prgrs"
    
    with CreateObject("Scripting.FileSystemObject")
        .DeleteFile tarFile
    end with
end sub

自分の好みに文字を変えたり、表示を変更したり。

正しく動いているかどうかすぐ確認できなかったので、
各ポイントでメッセージを表示して動作を確認。

特に修正する点はなかった。


改良したソースがこちら。

フォルダ内にファイルがたくさんある場合を想定して、
フォルダを処理したときの進捗を別途表示するようにした。

表示する文字列をグローバルの位置で宣言しておくと
各モジュール間で受け渡さなくて良いので楽ちんだった。
Option Explicit
'ドラッグドロップ
Dim objArgs : Set objArgs = WScript.Arguments '入力
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim strFolder, strFile, strPath, strExt
Dim cnt, stText
If objArgs.Count = 0 Then
    strFolder = objFSO.GetParentFolderName(WScript.ScriptFullName)
call ProcessFolder(strFolder)
Else
    For Each strPath In objArgs
cnt = cnt + 1
stText = cnt & "/" & objArgs.count & "件目"
call outputprogress(stText) 'プログレスバー
        If objFSO.FolderExists(strPath) Then
            call ProcessFolder(strPath)
        ElseIf objFSO.FileExists(strPath) Then
            call ProcessFile(strPath)
        End If
    Next
End If
Sub ProcessFolder(strFolderPath)
    Dim objFolder, objFile, colFiles,fcnt
    Set objFolder = objFSO.GetFolder(strFolderPath)
    Set colFiles = objFolder.Files
    For Each objFile In colFiles
fcnt = fcnt + 1
stText = cnt & "/" & objArgs.count & "件目(Dir内 " & fcnt & "/" & colFiles.count & ")"
call outputprogress(stText) 'プログレスバー
        call ProcessFile(objFile.Path)
    Next
    Set colFiles = Nothing
    Set objFolder = Nothing
End Sub
'ファイルに対するメイン処理
Sub ProcessFile(strFilePath)
    strExt = objFSO.GetExtensionName(strFilePath)
msgbox strFilePath 
    If LCase(strExt) = "csv" Then
         ' Do something with the file
    End If
End Sub
'-----------------------------------------------------------'プログレスバー
sub outputProgress(text)
    call deletePrgrsFile
    if text <> "" then call makePrgrsFile(text)
end sub
Sub  makePrgrsFile(text)
    dim myPath : myPath = Wscript.scriptFullname
    dim yPos : yPos = instrrev(myPath , "\")
    dim strFile: strFile = left(myPath,yPos) & "Args:" & text & ".prgrs"
    dim objFS:    Set objFS = CreateObject("Scripting.FileSystemObject")    
    dim obfFile :    Set obfFile = objFS.CreateTextFile(strFile)    ' ファイル作成
    set objFS = nothing
    set obfFile = nothing
end sub
sub deletePrgrsFile()
    on error resume next
    dim myPath : myPath = Wscript.scriptFullname
    dim yPos : yPos = instrrev(myPath , "\")
    dim tarFile:tarFile = left(myPath,yPos) & "*.prgrs"
    
    with CreateObject("Scripting.FileSystemObject")
        .DeleteFile tarFile
    end with
end sub

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