' Excel用 ファイル情報コピー ' shell:sendto に配置 Option Explicit Dim objFSO Dim objWS Dim ans, fol_level, path, mystring ' サブフォルダ以下を階層的に調査するか ' 1:調査する 0:調査しない -1:毎回確認する Const fol_level_q = 0 ' 調査する場合の階層レベル ' -1:制限なし 0:サブフォルダは調査しない n:N階層まで Const def_fol_level = 20 ' フォルダ情報を出力する場合は1、しない場合は0 Const fol_output = 1 if WScript.Arguments.Count = 0 then WScript.echo("too few arguments.") WScript.Quit(-1) end if If fol_level_q < 0 Then ans = MsgBox("サブフォルダを調査しますか?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "確認") If ans = vbCancel Then WScript.Quit(-1) ElseIf ans = vbNo Then fol_level = 0 Else fol_level = def_fol_level End if Else If fol_level_q = 0 Then fol_level = 0 Else fol_level = def_fol_level End If End If Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") mystring = "" ' ファイルを先に処理 For Each path in WScript.Arguments If objFSO.FileExists(path) Then ListFolder objFSO.GetFile(path), 0 End If Next For Each path in WScript.Arguments If objFSO.FolderExists(path) Then ListFolder objFSO.GetFolder(path), 0 End If Next If Len(mystring) > 0 Then mystring = "パス" & vbTab & "名前" & vbTab & "更新日時"& vbTab & "サイズ" & vbCrLf & mystring Set objWS = CreateObject("WScript.Shell") objWS.Exec("clip").StdIn.Write mystring End If Sub ListFolder(ByVal objFF, ByVal level) '引数は File or Folder Dim objSubFolder Dim objFile Dim pfolder, fname, fdate, fsize ' ファイルの場合、その情報を出力 If objFSO.FileExists(objFF) Then pfolder = objFF.ParentFolder fname = objFF.name fdate = objFF.DateLastModified fsize = objFF.size mystring = mystring & pfolder & vbTab & fname & vbTab & fdate & vbTab & fsize & vbCrLf ElseIf objFSO.FolderExists(objFF) Then ' フォルダの場合、そのフォルダ自身の情報を出力 If fol_output = 1 Then pfolder = objFF.ParentFolder fname = objFF.name fdate = objFF.DateLastModified mystring = mystring & pfolder & vbTab & fname & vbTab & fdate & vbCrLf End If If (fol_level < 0) or (level < fol_level) Then ' フォルダ直下のファイル情報を出力 For Each objFile In objFF.files pfolder = objFile.ParentFolder fname = objFile.name fdate = objFile.DateLastModified fsize = objFile.size mystring = mystring & pfolder & vbTab & fname & vbTab & fdate & vbTab & fsize & vbCrLf Next ' サブフォルダに対して再帰的に適用 For Each objSubFolder In objFF.SubFolders ListFolder objSubFolder, level + 1 Next End If End If End Sub