
VBScriptでファイルリストを出力しようと考えています。
そこでフォルダ内のファイルを再帰的に検索したいのですが、上手くいきません。
C:\A\B\C\D\○○.txt
C:\A\BB\C\D\××.txt
C:\A\BBB\C\D\△△.txt
のようにB,BB,BBBの部分のみ可変にしたいのです。
例えば C:\A\B\CC\D\○○.txt C:\A\B\CCC\D\○○.txt のような
B以外のフォルダのサブフォルダについては再帰検索はいきたくありません。
(A,C ,D については引数で与えようと考えています。)
よいロジックはないでしょうか?
ご存知の方がいらっしゃいましたらぜひ教えてください。
出力形式は
ファイル名,作成日時
以下 色々参考にして作成したプログラム。
これだと指定フォルダ以下すべて検索にいってしまいます(-_-;)
---------------------------------------------------------------
Dim fso
Dim folder
Set fso = CreateObject("Scripting.FileSystemObject")
Dim pass
pass ="C:\" & args.item(0) & "\"
Dim subFolder
For Each subFolder In folder.SubFolders
ShowSubfolders FSO.GetFolder(pass)
Next
Sub ShowSubFolders(Folder)
Dim file
For Each file In folder.Files
WScript.Echo _
file.Name & "," & _
file.DateCreated
Next
For Each subFolder In folder.SubFolders
ShowSubFolders subFolder
Next
End Sub
No.1ベストアンサー
- 回答日時:
@IT:Windows TIPS -- Tips:ファイルの一覧情報リストを取得する
http://www.atmarkit.co.jp/fwin2k/win2ktips/310fi …
こちらが参考になると思います。
この回答への補足
早速ありがとうございます。
この例だと最下層まですべてのフォルダ検索してしまいますよね。
(例)
C:\A\B\C\D\○○.txt
C:\A\B\C\DD\○○.txt
C:\A\B\CC\E\○○.txt
C:\A\B\CC\EE\○○.txt
あるフォルダにあるサブフォルダのみ全検索。そのサブフォルダにあるフォルダについては固定で持たせるような方法がないでしょうか?
補足
>C:\A\B\C\D\
>A,C ,D については固定
と書きましたが、Dの下にあるフォルダについては全検索をしたいです。
C:\A\B\C\D\E
C:\A\B\C\D\EE
C:\A\B\C\D\EEE
のような感じです
よろしくお願いいたします。
No.4
- 回答日時:
> あるフォルダにあるサブフォルダのみ全検索。
そのサブフォルダにあるフォルダについては固定で持たせるような方法がないでしょうか?> strPath = InputBox("調べたいフォルダを絶対パスで入力してください。", "ファイル一覧", "c:\")
この起点となるフォルダの指定を
C:\A\B\C\
とすればいいのでは?
No.3
- 回答日時:
暇つぶしに作ってみました。
こんな感じのやつでしょうか?パターンは * で指定してください(複数指定可能)。
例) C:\A\*\C\D, C:\A\*\C\*
Option Explicit
Dim fso
Dim scanPath
Set fso = CreateObject("Scripting.FileSystemObject")
scanPath = WScript.Arguments(0)
ScanDirectory fso.GetDriveName(scanPath) & "\", Mid(scanPath, Len(fso.GetDrivename(scanPath)) + 1)
WScript.Quit 0
Sub ScanDirectory(ByVal dirPath, ByVal subDirPattern)
DebugPrint "dirPath : " & dirPath
DebugPrint "subDirPattern : " & subDirPattern
Dim dir
Dim subDir
Dim file
Dim nextDirPath
Dim nextSubDirPattern
If subDirPattern <> "" Then
' サブディレクトリパターンの指定がある場合
If InStr(1, subDirPattern, "*") > 0 Then
' パターンに * が含まれる場合
' 親ディレクトリのパスを取得(ex. C:\A\*\C -> C:\A)
nextDirPath = dirPath & Left(subDirPattern, InStr(1, subDirPattern, "*") - 1)
DebugPrint "Next dir path : " & nextDirPath
' 次のサブディレクトリパターンを取得(ex. C:\A\*\C -> \C)
nextSubDirPattern = Right(subDirPattern, Len(subDirPattern) - InStr(1, subDirPattern, "*"))
DebugPrint "Next sub dir pattern : " & nextSubDirPattern
If fso.FolderExists(nextDirPath) Then
Set dir = fso.GetFolder(nextDirPath)
' 次のサブディレクトリパターンを指定して検索
For Each subDir In dir.SubFolders
ScanDirectory subDir.Path, nextSubDirPattern
Next
Else
DebugPrint "Directory not found : " & nextDirPath
End If
Else
ScanDirectory dirPath & subDirPattern, ""
End If
Else
' サブディレクトリパターンが指定されていない場合
If fso.FolderExists(dirPath) Then
Set dir = fso.GetFolder(dirPath)
' ディレクトリ配下のファイルのパスを出力
For Each file In dir.Files
WScript.Echo file.Path & "," & file.DateCreated
Next
' サブディレクトリを再帰的に検索
For Each subDir In dir.SubFolders
ScanDirectory subDir.Path, ""
Next
Else
DebugPrint "Directory not found : " & dirPath
End If
End If
End Sub
Sub DebugPrint(ByVal message)
If False Then
WScript.Echo message
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
会社のネットワーク上のファイ...
-
Windows10でコマンドプロンプト...
-
【マクロ】ファイル名の日付に...
-
フォルダの移動
-
ファイル名と同名のフォルダを...
-
フォームを最前面に表示したい...
-
VBA 最新のフォルダ取得
-
excelマクロ 冒頭3文字が一致す...
-
あるフォルダの中にあるファイ...
-
excel VBA Dirにて検索したフォ...
-
Access VBA で フォルダ権限...
-
VBScriptでフォルダ参照ダイア...
-
エクセルで、マクロを使わずに...
-
[VBS] Unicodeの文字化けを防ぎ...
-
フォルダにリンクを貼りたい
-
カレントフォルダって?
-
フォルダ選択ダイアログ:ネッ...
-
フォルダ参照ダイアログAPIをVB...
-
フォルダ内のPDFファイル名を変...
-
API関数(DLL)の呼び出しにお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
会社のネットワーク上のファイ...
-
ファイル名と同名のフォルダを...
-
デスクトップの画像をhtmlに表...
-
VBA 最新のフォルダ取得
-
VBA フォルダ名に特定の文字を...
-
Excelで指定したフォルダに保存...
-
パス名に2バイト文字(マルチバ...
-
Excelのハイパーリンクについて...
-
Access VBA で フォルダ権限...
-
C ファイル出力で、フォルダが...
-
ExcelVBAでフォルダへのハイパ...
-
VBA フォルダの複数選択ができない
-
フォルダ内のPDFファイル名を変...
-
エクセルマクロで指定フォルダ...
-
excel VBA Dirにて検索したフォ...
-
エクセルのデータをメモ帳に貼...
-
サーバ内のフォルダ名と各フォ...
-
条件に合うフォルダが存在する...
-
VBA フォルダ名と画像ファイル...
おすすめ情報