解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

VBScript によるフォルダ内ファイル取得




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次




目的


指定したフォルダ内にあるファイル名を取得する関数を作成します。




関数

ソースコード

この関数はディレクトリを引数で渡して、渡したディレクトリ内の全ファイルの名前が格納された配列を返す関数です。ファイルが見つからなければ -1 を返します。
『VBS』というフォルダの中に『myFunc』というフォルダを作成していて、自作した関数は全て『myFunc』フォルダに保存しています。

getFileName_crrDir.vbs

Function getFileName(crrDir)

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

    ' 引数 crrDir のフォルダのオブジェクトを取得
    Set objFolder = objFileSys.GetFolder(crrDir)

    ' ファイルが無い場合
    IF objFolder.Files.Count = 0 then
        getFileName = -1
        Exit Function
    End IF

    ' FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
    tmpFile = ""
    For Each objFile In objFolder.Files
        ' 取得したファイルのファイル名格納
        IF tmpFile = "" then
            tmpFile = objFile.Name
        Else
            tmpFile = tmpFile & "@" & objFile.Name
        End IF
    Next

    getFileName = split(tmpFile, "@")

    Set objFolder = Nothing
    Set objFileSys = Nothing

End Function

使い方

作成した getFileName_crrDir.vbs ファイルを呼び出して使うプログラムを書きます。
このプログラムは『VBS』フォルダの直下に保存します。

main.vbs

'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()

'---------------------------------------
'--- フォルダ内ファイルの取得 ---
'---------------------------------------
   '--- 変数宣言 ---
   crrDir = "C:¥Test¥Sample"
   '--- 実行 ---
   ArrFile = getFileName(crrDir)

   Msgbox Join(ArrFile, vbNewLine)

'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
MsgBox wscript.scriptname & " の処理が完了しました。"
'------------------------------------------------------------------------------
' 自作関数をコールするサブルーチン
'------------------------------------------------------------------------------
sub IncludeFunction()
   '----------------------------------------------------------------------------
   ' 自分(=VBSファイル)のディレクトリを取得する
   '----------------------------------------------------------------------------
   FullPath = wscript.scriptfullname
   FileName = wscript.scriptname
   pathLen= len(FullPath) - len(FileName)
   crrDir = left(FullPath, pathLen)
   chiDir = "myFunc"
   crrDir = crrDir & chiDir
   '----------------------------------------------------------------------------
   ' ファイルシステムを扱うオブジェクトを作成
   '----------------------------------------------------------------------------
   Set objFileSys = CreateObject("Scripting.FileSystemObject")
   '----------------------------------------------------------------------------
   ' フォルダのオブジェクトを取得
   '----------------------------------------------------------------------------
   Set objFolder = objFileSys.GetFolder(crrDir)
   '----------------------------------------------------------------------------
   ' FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
   '----------------------------------------------------------------------------
   For Each objFile In objFolder.Files
      '--------------------------------------------------------------------------
      ' 自作関数のコール
      '--------------------------------------------------------------------------
      FuncFile = objFile.Name
      if instr(1, FuncFile, ".txt") = 0 then
         Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
         ExecuteGlobal objFile.ReadAll()
         objFile.Close
      end if
   Next
   '----------------------------------------------------------------------------
   ' メモリ解放
   '----------------------------------------------------------------------------
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFileSys = Nothing
end sub




コメント

これで、 main.vbs を実行すると引数で渡したディレクトリ内の全ファイル名が格納された配列を返します。 ディレクトリ内のファイルが表示されたかと思います。 ファイルが見つからない時は -1 を返します。




以上