【问题标题】:VBS to list file names NOT matching given extensionVBS 列出与给定扩展名不匹配的文件名
【发布时间】:2016-11-23 17:09:27
【问题描述】:

我一直致力于以下 VBS。这将搜索父文件夹和所有子/子文件夹并打印具有提供的扩展名(doc、docx、msg、ppt、txt)的任何文件,并提出以下内容。我是 VBS 的新手,但我想将文件扩展名定义为 IGNORE,列出所有其他文件。我有每个文件类型的目录列表工作,但我不想为每个文件类型设置 NEXT。我能够使用顶部的 代码来显示所有与扩展名不匹配的文件:

If objFSO.GetExtensionName(strFileName) <> "jpg" then

但这在下部不起作用:

if LCase(InStr(1,Files, "jpg")) > 1 then Wscript.Echo Files 

我还希望能够定义多种文件类型;喜欢

    If objFSO.GetExtensionName(strFileName) <> "jpg" OR "jpeg" OR "tiff"

最后我需要输出到文本文件,而不是 Windows 脚本消息框。

有人可以帮忙吗?很抱歉有错别字或混淆,英语不是我的母语。

Dim fso

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set FSO = WScript.CreateObject("Scripting.Filesystemobject")
Set f = fso.CreateTextFile("C:\temp\output.txt", 2)

objStartFolder = "C:\Test"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files

For Each objFile in colFiles 
strFileName = objFile.Name
If objFSO.GetExtensionName(strFileName) = "x937" then
Wscript.Echo objFile.Name 
End If

Next

For Each objFile in colFiles 
strFileName = objFile.Name
If objFSO.GetExtensionName(strFileName) = "docx" then
    Wscript.Echo objFile.Name 
End If

Next

For Each objFile in colFiles 
strFileName = objFile.Name
If objFSO.GetExtensionName(strFileName) = "doc" then
    Wscript.Echo objFile.Name 
End If

Next

For Each objFile in colFiles 
strFileName = objFile.Name
If objFSO.GetExtensionName(strFileName) = "txt" then
    Wscript.Echo objFile.Name 
End If

Next

For Each objFile in colFiles 
strFileName = objFile.Name
If objFSO.GetExtensionName(strFileName) = "msg" 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, "msg")) > 1 then Wscript.Echo Files 
    next
    ShowSubFolders Subfolder 
Next 

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, "txt")) > 1 then Wscript.Echo Files 
    next
    ShowSubFolders Subfolder 

Next 

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, "ppt")) > 1 then Wscript.Echo Files 
    next
    ShowSubFolders Subfolder 
Next 

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, "xls")) > 1 then Wscript.Echo Files 
    next
    ShowSubFolders Subfolder 
Next 

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, "doc")) > 1 then Wscript.Echo Files 
    next
    ShowSubFolders Subfolder 

Next 

End Sub

【问题讨论】:

  • 但这在下部不起作用:if LCase(InStr(1,Files, "jpg")) &gt; 1 then Wscript.Echo Files 我相信这是因为Files是一个完整的对象,而你只有一个@它的 987654327@ 属性,所以你应该用Files.Name 替换它

标签: vbscript


【解决方案1】:

您可以在一个循环中检查所有扩展:

For Each objFile in colFiles 
    Dim strFileName : strFileName = objFile.Name
    Dim strExtension : strExtension = LCase(objFSO.GetExtensionName(strFileName))

    If strExtension <> "txt" And _
        strExtension <> "jpg" And _
        strExtension <> "msg" And _
        strExtension <> "docx" Then

        Wscript.Echo objFile.Name 
    End If
Next

我只是放了一堆随机扩展,因为不清楚你想忽略哪些。确保将它们全部小写,以便比较有效,因为代码会将实际扩展名转换为小写。

【讨论】:

    【解决方案2】:

    为了将输出导出到 txt 文件,下面的代码可能会起作用

    函数TextFile_Generate()

    strFile = "C:\...\ReportName.txt"
    strValue = "output text..."
    
    Set objFSO=CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(strFile) Then
        Set objFile = objFSO.OpenTextFile(strFile,8, True)
    Else
        Set objFile = objFSO.CreateTextFile(strFile,True)
    End If
    objFile.Write strValue & vbCrLf
    objFile.Close
    
    Set objFile = Nothing
    Set objFSO =Nothing
    

    结束函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 2012-06-04
      相关资源
      最近更新 更多