2016-11-23 106 views
0

我一直在研究以下VBS。這將搜索父文件夾和所有子/子文件夾,並使用提供的擴展名(doc,docx,msg,ppt,txt)打印任何文件,並提出以下內容。我是VBS新手,但我想定義文件擴展名爲IGNORE,列出所有其他文件。我有每個文件類型工作的目錄列表,但我不想爲每個文件類型設置一個NEXT。我能夠使用<>代碼在頂部表明,不使用匹配擴展名的文件:VBS列出文件名不匹配給定的擴展名

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 
+0

*但是,這並不在下部的工作: '如果LCase(InStr(1,Files,「jpg」))> 1那麼Wscript.Echo文件* *我相信這是因爲'Files'是一個完整的對象,你只有一個'.Name'屬性它,所以你應該用'Files.Name'替換它 –

回答

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 

我只是把一堆隨意擴展的,因爲它是不明確的,你要忽略哪些。確保你把它們全寫成小寫,所以比較起作用,因爲代碼將實際的擴展名轉換爲小寫。

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 

端功能