15

ここに私のコードがありますが、objFile.Extension を使用してリストをフィルタリングすることはできません。

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\dev"

Set objFolder = objFSO.GetFolder(objStartFolder)
Wscript.Echo objFolder.Path

Set colFiles = objFolder.Files

For Each objFile in colFiles
If objFile.Extension = "PDF" Then
    Wscript.Echo objFile.Name
    End If
Next
Wscript.Echo

ShowSubfolders objFSO.GetFolder(objStartFolder)

Sub ShowSubFolders(Folder)
    For Each Subfolder in Folder.SubFolders
        Wscript.Echo Subfolder.Path
        Set objFolder = objFSO.GetFolder(Subfolder.Path)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            Wscript.Echo objFile.Name
        Next
        Wscript.Echo
        ShowSubFolders Subfolder
    Next
End Sub

実行すると、エラーが返されます

(11, 1) Microsoft VBScript ランタイム エラー: オブジェクトはこのプロパティまたはメソッドをサポートしていません: 'objFile.Extension'

4

7 に答える 7

24

FileSystemObject オブジェクトでGetExtensionNameメソッドを使用する必要があります。

Set x = CreateObject("scripting.filesystemobject")
WScript.Echo x.GetExtensionName("foo.pdf")

あなたの例では、これを使ってみてください

For Each objFile in colFiles
    If UCase(objFSO.GetExtensionName(objFile.name)) = "PDF" Then
        Wscript.Echo objFile.Name
    End If
Next
于 2010-11-17T02:58:29.030 に答える
11

(選択した検索エンジンからこれに出くわした人向け)

これはフォルダーを再帰的にトレースするだけなので、コードを 2 回複製する必要はありません。また、OP ロジックは不必要に複雑です。

Wscript.Echo "begin."
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSuperFolder = objFSO.GetFolder(WScript.Arguments(0))
Call ShowSubfolders (objSuperFolder)

Wscript.Echo "end."

WScript.Quit 0

Sub ShowSubFolders(fFolder)
    Set objFolder = objFSO.GetFolder(fFolder.Path)
    Set colFiles = objFolder.Files
    For Each objFile in colFiles
        If UCase(objFSO.GetExtensionName(objFile.name)) = "PDF" Then
            Wscript.Echo objFile.Name
        End If
    Next

    For Each Subfolder in fFolder.SubFolders
        ShowSubFolders(Subfolder)
    Next
End Sub
于 2011-11-20T07:05:05.220 に答える
4

ファイル拡張子は大文字と小文字が区別される場合があります...しかし、コードは機能します。

Set objFSO = CreateObject("Scripting.FileSystemObject")
  objStartFolder = "C:\Dev\"

  Set objFolder = objFSO.GetFolder(objStartFolder)
  Wscript.Echo objFolder.Path

  Set colFiles = objFolder.Files

  For Each objFile in colFiles
  strFileName = objFile.Name

  If objFSO.GetExtensionName(strFileName) = "pdf" Then
      Wscript.Echo objFile.Name
  End If

  Next
  Wscript.Echo

  ShowSubfolders objFSO.GetFolder(objStartFolder)

  Sub ShowSubFolders(Folder)
     For Each Subfolder in Folder.SubFolders
          Wscript.Echo Subfolder.Path
          Set objFolder = objFSO.GetFolder(Subfolder.Path)
          Set colFiles = objFolder.Files
          For Each objFile in colFiles
              Wscript.Echo objFile.Name
          Next
          Wscript.Echo
          ShowSubFolders Subfolder
      Next
  End Sub
于 2013-07-11T22:31:55.550 に答える
2
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\Users\NOLA BOOTHE\My Documents\operating system"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files
For Each objFile in colFiles
    Wscript.Echo objFile.Name
Next
于 2012-02-28T21:18:13.910 に答える
2

OPには役立たないかもしれませんが、うまくいけば他の人はこれが役立つかもしれません:

走る

%ComSpec% /c cd/d StartPath & dir/s/b *.pdf

シェル オブジェクトの使用

StdOut にはすべての PDF ファイルが含まれます

于 2016-08-27T20:31:45.403 に答える
1

このコードを確認してください:

Set objFSO = CreateObject("Scripting.FileSystemObject") 

objStartFolder = "C:\Folder1\"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files

For Each objFile in colFiles 
    strFileName = objFile.Name

    If objFSO.GetExtensionName(strFileName) = "pdf" Then 
        Wscript.Echo objFile.Name 
    End If
Next

ShowSubfolders objFSO.GetFolder(objStartFolder)

Sub ShowSubFolders(Folder)

    For Each Subfolder in Folder.SubFolders 
        Set objFolder = objFSO.GetFolder(Subfolder.Path) 
        Set colFiles = objFolder.Files 
        for each Files in colFiles 
            if LCase(InStr(1,Files, ".pdf")) > 1 then Wscript.Echo Files 
        next
        ShowSubFolders Subfolder 
    Next 
End Sub
于 2013-08-21T14:51:17.680 に答える
1

この URL には、質問に対する十分に文書化された回答があります。

http://blogs.technet.com/b/heyscriptingguy/archive/2005/02/18/how-can-i-list-the-files-in-a-folder-and-all-its-subfolders.aspx

その URL に示されている回答はやや複雑で、WMI (Windows Management Instrumentation) を使用してファイルとフォルダーを反復処理しています。しかし、Windows の管理を頻繁に行う場合は、WMI を習得する価値があります。

今すぐ何かが必要な場合に備えて、これを投稿しています。しかし、以前はファイルシステムオブジェクトベースのアプローチを使用していたと思います。例を探して、見つけたら後で投稿します。

これがお役に立てば幸いです。

于 2011-06-04T22:23:45.303 に答える