Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 正在尝试搜索文件夹中的文件_Vbscript - Fatal编程技术网

Vbscript 正在尝试搜索文件夹中的文件

Vbscript 正在尝试搜索文件夹中的文件,vbscript,Vbscript,我正在尝试创建我的第一个VBS脚本,但我迷路了。我需要能够在4个网络路径内搜索特定文本。基本上,这是4个单独的日志文件,只保存文本文件,没有子目录或任何东西。我想,如果文本是在任何一个网络路径中找到的,它只会使该路径上升,而不允许其他路径上升。文本文件的名称应为用户输入驱动 有人能给我指出正确的方向吗?还是帮我?我能够打开网络路径,但不知道如何做其余的:以下是我到目前为止所拥有的:代码工作。。但我必须说得非常具体。。我只想键入1234,然后它会找到该文件,但是文件名总是随机生成的,等等。。123

我正在尝试创建我的第一个VBS脚本,但我迷路了。我需要能够在4个网络路径内搜索特定文本。基本上,这是4个单独的日志文件,只保存文本文件,没有子目录或任何东西。我想,如果文本是在任何一个网络路径中找到的,它只会使该路径上升,而不允许其他路径上升。文本文件的名称应为用户输入驱动

有人能给我指出正确的方向吗?还是帮我?我能够打开网络路径,但不知道如何做其余的:以下是我到目前为止所拥有的:代码工作。。但我必须说得非常具体。。我只想键入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
提前感谢您的帮助

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

提示,在没有扩展名的情况下,输入每个文件名将允许您比较字符串以进行快速匹配

这里是我提到的技巧,不是在vb脚本中,而是按照您需要的内容。 这是一个vb脚本,但可能是visual basic本身,而不是脚本。
显示如何处理递归。

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

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

这里有一些提示

您可以创建一个数组来保存要搜索的每个网络路径。 如果您只想测试文件名的开头,请对每个文件名使用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

即使我只搜索4个网络路径中的1个文件,这种方法是否有效?是的,正如我所理解的,这4个路径位于一个公共文件夹下。我建议递归公共文件夹下的所有文件夹,并避免将它们作为数组添加。