VBScript

【VBScript】特定フォルダ以下にあるファイルの、フルパスを書いたテキストを作成する

VBScriptで作った「特定フォルダ以下にあるファイルの、フルパスを書いたテキストを作成する」コードです。

このコードをコピーしてテキストファイルを作成し、拡張子を「.vbs」に変えればすぐに使えます。
特定フォルダとは、VBScriptを実行したカレントディレクトリになります。
フルパスを書いた「FileList.txt」というファイルが、カレントディレクトリに作成されます。

このコードでは .txt という拡張子をターゲットに取得していますが、
例えばこれを .sql とかにして先頭に"@"を付ければ、OracleのSQLPLUSでそのまま流せる形になります。

ポイントは再帰処理で実行フォルダ以下のフォルダも全走査する点でしょうか。
拡張子をソースコード内で直に書いてますが、引数で渡してあげれば汎用性が増します。




Option Explicit

Dim fso, folder, file, subFolder
Dim fileList()
Dim fileIdx
Dim objWshShell
Const FILE_LIST = "\FileList.txt"

'FileSystemObjectオブジェクトの生成
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

'配列初期化
Redim fileList(0)
fileIdx = -1

'カレントディレクトリ以下のフォルダ取得
Set folder = fso.GetFolder(".\")

'全ファイル取得
getFilelist(folder)

If fileIdx > -1 then
  'テキストファイルに書き込み
  WriteFiles
Else
  msgbox("対象ファイルがありません。")
End if


'*===*===*===*===*===*===*
'ファイルリスト取得(再帰処理)
'*===*===*===*===*===*===*
Sub getFilelist(folder)

  For Each file In folder.Files
    
    '末尾が.txtのみ取得
    If Mid(file.Path, InStrRev(file.Path, ".")) = ".txt" then
        fileIdx = fileIdx + 1
        redim Preserve fileList(fileIdx)
        fileList(fileIdx) = file.Path
    End if
  Next

  For Each subFolder In folder.SubFolders
    getFilelist(subFolder)
  Next

End Sub

'*===*===*===*===*===*===*
'取得したパスをテキストファイルに書き込み
'*===*===*===*===*===*===*
Sub WriteFiles
   Dim f1 , CD , strWork
   Const ForReading = 1
   
   'WScript.Shellオブジェクトの作成
   Set objWshShell = CreateObject("WScript.Shell")
   
   'カレントディレクトリ取得
   CD = objWshShell.CurrentDirectory
   Set objWshShell = Nothing
   
   Set f1 = fso.CreateTextFile(CD & FILE_LIST, True)
   
   '書き込み
   For Each strWork In fileList
     f1.WriteLine strWork
   Next
   
   f1.Close
   
End Sub






-VBScript