VBS列出不匹配给定扩展名的文件名

时间:2016-11-23 17:09:28

标签: vbscript

我一直在研究以下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脚本的msg框。

有人可以帮忙吗?抱歉打字错误或混淆,英语不是我的第一语言。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

要将输出导出到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

结束功能