试图在文件夹中搜索文件

时间:2014-04-23 19:50:36

标签: vbscript

我试图创建我的第一个VBS脚本而且我迷路了。我需要能够在4个网络路径中搜索特定文本。基本上这是4个单独的LOG文件,只保存文本文件,没有子目录或任何东西。我想如果文本是在任何一个网络路径中找到它只会带来那条路径而不允许其余部分出现。文本文件的名称应该是用户输入驱动的。

有没有人可以指出我正确的方向?还是帮帮我吧?我能够打开网络路径,但不知道如何做其余的事情:这是我到目前为止:代码工作..但我必须非常具体..我只想输入" 1234"然后它找到该文件,但文件名总是随机生成等等。" 1234-02304-923734.txt"或" 1234-932987-973294"所以我只需要搜索第一个1234,但我不知道其余的。我现在的方式是打开explore.exe然后转到那条路然后进行搜索,它会查找它。

Dim Input
Input = InputBox("Enter beginning filename") 
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists("\\servername\c$\Program Files (x86)\LOGS\")       Then
If objFSO.FileExists("\\servername\c$\Program Files (x86)\LOGS\"&       Input) Then
        Wscript.Echo "Folder and file exist"
    Else
        Wscript.Echo "Folder exists, file doesn't"
    End If
Else
    Wscript.Echo "Folder does not exist"
End If

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

swstrau118, 我想帮助您了解您的方法。首先,您必须递归Logs文件夹中的每个子文件夹。然后,您将比较用户输入中找到的每个文件和文件。找到文件后,您可以将位置存储在变量中,直到搜索完成,然后将位置返回给用户。 我找到了一个有用的链接,不是在VB脚本中,但我相信你可以遵循。 如果您遇到问题,可能会询问有关代码的具体问题。

提示,带上每个文件名,如果没有延伸,将允许您比较字符串以便快速匹配。

这是我提到的提示,不是在vb脚本中,而是按照你需要的方式。 http://www.dotnetperls.com/recursive-file-directory-vbnet 这是一个vb脚本,虽然可能是visual basic而不是脚本。 http://www.ammara.com/access_image_faq/recursive_folder_search.html 显示如何处理递归。

答案 1 :(得分:0)

这是一个递归函数。当它遇到一个文件夹时,它会调用它自己。

Sub GenerateFullHotkeyInFolder(Fldr) 
    on error resume next 
    set WshShell = CreateObject("WScript.Shell") 
    Set objShell = CreateObject("Shell.Application")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set Dict=CreateDictionary()
    Set FldrItems=Fldr.Items
    For Each oFile in FldrItems
        With oFile
            If .IsFileSystem = true And .IsLink = true And .Type <> "Shortcut to MS-DOS Program" then
                set lnk = .GetLink 
                If lnk.hotkey <> 0 then 
                    Set fsop = fso.GetFile(.Path)
                    LnkName = "<b>" & fso.GetBaseName(fso.GetFile(.Path)) & "</b><br>" & fsop.ParentFolder.path & "\" & fso.GetBaseName(fso.GetFile(.Path)) & "." & fso.GetExtensionName(fso.GetFile(.Path))
                    HK=Dict.Item(lnk.hotkey AND 255)
                    If HK = "" then HK = "A reserved or OEM specific key"
                    Modkey =""
                    If (lnk.hotkey And 256) = 256 then Modkey = "Shift + "
                    If (lnk.hotkey And 512) = 512 then Modkey = ModKey + "Ctrl + "
                    If (lnk.hotkey And 1024) = 1024 then Modkey = ModKey + "Alt + "
                    If (lnk.hotkey And 2048) = 2048 then Modkey = ModKey + "Winkey + "
                    DiagVar = DiagVar & "<tr><td><b>" & ModKey & " " & HK & "</b></td><td><a class=TblURL  onmouseover='MakeRed()' onmouseout='MakeBlack()' onclick='FindShortcut(" & Chr(34) & .path & Chr(34) & ")'>" & LnkName  & "</a>" & "</td><td><a class=TblURL onmouseover='MakeRed()' onmouseout='MakeBlack()' onclick='FindShortcut(" & Chr(34) & lnk.path & Chr(34) & ")'>" & lnk.path & "</a></td></tr>" & vbcrlf
                End If 
            ElseIf .IsFileSystem = true And .IsFolder = true then
                GenerateFullHotkeyInFolder(.GetFolder)
            End If          
        End With
    Next


End Sub

答案 2 :(得分:0)

以下是一些提示。

  1. 您可以创建一个数组来保存要搜索的每个网络路径。
  2. 如果您只想测试文件名的 start ,请在每个文件的名称上使用Left()功能,并将其与输入进行比较。

    ' Create an array to hold each path to search...
    Paths = Array("\\server1\c$", _
                  "\\server2\c$", _
                  "\\server3\c$", _
                  "\\server4\c$")
    
    ' Check each file in each path...
    For Each Path In Paths
        For Each File In objFSO.GetFolder(Path).Files
            If StrComp(Left(File.Name, Len(Input)), Input, vbTextCompare) = 0 Then
    
                WScript.Echo "Found " & File.Name & " at " & Path & "."
    
            End If
        Next
    Next