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 を返します。
以上