下記のソースを参考にして、特定フォルダ配下のファイル一覧を、相対パスで取得できるような処理にしてください。
http://d.hatena.ne.jp/john-frank/20070509/1178641222
例
C:\test\index.html
C:\test\css\style.css
C:\test\css\common.css
C:\test\img\1\a.gif
C:\test\img\1\b.gif
C:\test\img\2\c.gif
のようなときに、fso.GetFolder("C:\test")
の処理で
index.html
css\style.css
css\common.css
img\1\a.gif
img\1\b.gif
img\2\c.gif
という結果を改行コード付で変数にて取得したい。
以下のスクリプトでどうでしょうか。
(取得した一覧を確認するため「C:\test\myResult.txt」に書き出すようにしています。)
Option Explicit Dim fso, folder, file, subFolder Dim myResult 'ファイル一覧を格納する変数 Dim myTS '確認用に結果を書き出すためのTextStreamオブジェクト Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder("C:\test") myResult = filelist(folder, "") '以下は結果を確認するためのテキストファイル書き出し処理。 Set myTS = fso.CreateTextFile("C:\test\myResult.txt", True) myTS.Write myResult myTS.Close 'ファイル一覧を取得する関数。第1引数:対象フォルダ、第2引数:そのフォルダを示す相対パス Function filelist(folder, parent_folder) For Each file In folder.Files filelist = filelist & parent_folder & file.Name & vbCrLf Next For Each subFolder In folder.SubFolders filelist = filelist & filelist(subFolder, parent_folder & subFolder.Name & "\") Next End Function
以下のスクリプトでどうでしょうか。
(取得した一覧を確認するため「C:\test\myResult.txt」に書き出すようにしています。)
Option Explicit Dim fso, folder, file, subFolder Dim myResult 'ファイル一覧を格納する変数 Dim myTS '確認用に結果を書き出すためのTextStreamオブジェクト Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder("C:\test") myResult = filelist(folder, "") '以下は結果を確認するためのテキストファイル書き出し処理。 Set myTS = fso.CreateTextFile("C:\test\myResult.txt", True) myTS.Write myResult myTS.Close 'ファイル一覧を取得する関数。第1引数:対象フォルダ、第2引数:そのフォルダを示す相対パス Function filelist(folder, parent_folder) For Each file In folder.Files filelist = filelist & parent_folder & file.Name & vbCrLf Next For Each subFolder In folder.SubFolders filelist = filelist & filelist(subFolder, parent_folder & subFolder.Name & "\") Next End Function
ありがとうございます。
試してみましたが、どうも結果がNULLになってしまうようです。
【訂正】できました。
これでできましたよ。
Dim fso, folder Dim list Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder("C:\test") filelist(folder) MsgBox list Sub filelist(folder) For Each file In folder.Files target = Mid( file.Path, Len( "C:\test" ) + 2 ) list = list & vbCrLf & target Next For Each subFolder In folder.SubFolders filelist(subFolder) Next End Sub
できました。ありがとうございます。
ありがとうございます。
試してみましたが、どうも結果がNULLになってしまうようです。
【訂正】できました。