VBScript(WSH)の質問です。

下記のソースを参考にして、特定フォルダ配下のファイル一覧を、相対パスで取得できるような処理にしてください。

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

という結果を改行コード付で変数にて取得したい。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/05/12 16:54:52
  • 終了:2011/05/16 09:26:38

ベストアンサー

id:y3kz No.1

y3kz回答回数31ベストアンサー獲得回数92011/05/12 20:26:29

ポイント35pt

以下のスクリプトでどうでしょうか。

(取得した一覧を確認するため「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
id:P-mako

ありがとうございます。

試してみましたが、どうも結果がNULLになってしまうようです。

【訂正】できました。

2011/05/16 09:26:16

その他の回答(1件)

id:y3kz No.1

y3kz回答回数31ベストアンサー獲得回数92011/05/12 20:26:29ここでベストアンサー

ポイント35pt

以下のスクリプトでどうでしょうか。

(取得した一覧を確認するため「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
id:P-mako

ありがとうございます。

試してみましたが、どうも結果がNULLになってしまうようです。

【訂正】できました。

2011/05/16 09:26:16
id:i4ooon No.2

regnif回答回数56ベストアンサー獲得回数202011/05/13 15:10:51

ポイント35pt

これでできましたよ。

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
id:P-mako

できました。ありがとうございます。

2011/05/16 09:26:21
  • id:Mook
    Replace(file.Path, folder.Path & "\","")
    でとれそうですが。
  • id:y3kz
    自分の環境では、例示されたファイル構成以外の検証をしていませんでした。
    すみません。

    その他のフォルダを調べてわかったのですが、
    私がCreateTextFileメソッドの第3引数を設定しなかったため、
    取得したファイル一覧にUNICODEを必要とする文字列があると、
    TextStreamに取得結果を書き込む14行目で
    「プロシージャの呼び出し、または引数が不正です」
    というエラーが発生して、myResult.txtには何も書き込まれなくなってしまいますorz
    (『NULLになる』とはこのことでしょうか?)

    >Set myTS = fso.CreateTextFile("C:\test\myResult.txt", True)



    >Set myTS = fso.CreateTextFile("C:\test\myResult.txt", True, True)

    と変えてみてください。

この質問への反応(ブックマークコメント)

トラックバック

  • スーパーpre記法(シンタックス・ハイライト)の背景が黒くなって見にくい、というのは既出ですか? 例えば http://q.hatena.ne.jp/1305186890 とか http://q.hatena.ne.jp/1305350154 とか。 私の環境だけ?
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません