Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Find folder with two unknown parameters

Posted on 2013-12-30
8
Medium Priority
?
222 Views
Last Modified: 2014-01-03
Hi

Need to find a folder in a path like

\\servername\knownfoldername\unknownfoldername\partiallyknownfoldername

I need the ouput to be the unknownfoldername. I know that there is exactly one possible value.

For the partiallyknownfoldername there may be multiple values.

Everlas
0
Comment
Question by:Everlas
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
8 Comments
 
LVL 35

Expert Comment

by:Robert Schutt
ID: 39746692
This should get you started:
Option Explicit

Const strPath = "\\servername\knownfoldername" ' fill in the base path here

Dim arrSearch, objFSO, objFolder, objSubFolder, objSubSubFolder, strPartialName

arrSearch = Array("partiallyknownfoldername", "xyz") ' find one of these values in sub-subfolder names

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)
For Each objSubFolder In objFolder.SubFolders
	For Each objSubSubFolder In objSubFolder.SubFolders
		For Each strPartialName In arrSearch
			If InStr( LCase(objSubSubFolder.Name), LCase(strPartialName) ) > 0 Then
				MsgBox "Found '" & objSubSubFolder.Name & "' in '" & objSubFolder.Name & "'."
			End If
		Next
	Next
Next
Set objFolder = Nothing
Set objFSO = Nothing

Open in new window

0
 
LVL 58

Expert Comment

by:Bill Prew
ID: 39750032
Did that get the job done, or did you need something different?

~bp
0
 

Author Comment

by:Everlas
ID: 39754164
Hi
It looked quite simple, but I get the error "invalid outside procedure" when I get to "partialfoldername", so I can't get it to run.

Everlas
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 35

Accepted Solution

by:
Robert Schutt earned 2000 total points
ID: 39754234
this was meant to be run from a .vbs file (as you posted in vbscript), if you're running as VBA, you need to stick the code in a Sub and run that:
Option Explicit

Const strPath = "\\servername\knownfoldername" ' fill in the base path here

Sub runcode()

Dim arrSearch, objFSO, objFolder, objSubFolder, objSubSubFolder, strPartialName

arrSearch = Array("partiallyknownfoldername", "xyz") ' find one of these values in sub-subfolder names

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPath)
For Each objSubFolder In objFolder.SubFolders
    For Each objSubSubFolder In objSubFolder.SubFolders
        For Each strPartialName In arrSearch
            If InStr(LCase(objSubSubFolder.Name), LCase(strPartialName)) > 0 Then
                MsgBox "Found '" & objSubSubFolder.Name & "' in '" & objSubFolder.Name & "'."
            End If
        Next
    Next
Next
Set objFolder = Nothing
Set objFSO = Nothing

End Sub

Open in new window

0
 

Author Closing Comment

by:Everlas
ID: 39754573
Sorry, should have seen the problem myself. Works perfectly. Thanks.
However, I wonder why I get hourglass after the msgbox. Should the End if not kill the sub instantly? Is it just the closing down which is slow?

Do you know if the same result could have been accomplished with the Dir command?

Everlas
0
 
LVL 35

Expert Comment

by:Robert Schutt
ID: 39754627
While the msgbox is open you mean? That would be logical as the msgbox blocks the program. Or after you press OK? It will keep checking the rest of the folders but it shouldn't take very long unless you've got 1000s of folders.

"Dir" could be possible but I've done very little with that, I think it has a lot fewer options than you get with the FileSystemObject.
0
 
LVL 35

Expert Comment

by:Robert Schutt
ID: 39754774
So, this may or may not still interest you, but I felt challenged to find a solution with VBA's Dir command and here it is, maybe not the most elegant but works for me ;-)
Option Explicit

Const strPath = "\\servername\knownfoldername" ' fill in the base path here

Sub runcode2()
    Dim dn As String
    Dim arrdn() As String
    Dim cntdn As Integer
    cntdn = -1
    dn = Dir(strPath & "\", vbDirectory) ' note: returns all entries, files as well
    While dn <> ""
        If dn <> "." And dn <> ".." And (GetAttr(strPath & "\" & dn) And vbDirectory) = vbDirectory Then
            cntdn = cntdn + 1
            ReDim Preserve arrdn(cntdn)
            arrdn(cntdn) = dn
        End If
        dn = Dir
    Wend
    Dim arrSearch
    arrSearch = Array("partiallyknownfoldername", "xyz") ' find one of these values in sub-subfolder names
    Dim i As Integer
    For i = 0 To cntdn
        Dim pn
        For Each pn In arrSearch
            'Debug.Print "checking: " & arrdn(i) & " for '*" & pn & "*'"
            dn = Dir(strPath & "\" & arrdn(i) & "\*" & pn & "*", vbDirectory)
            While dn <> ""
                If (GetAttr(strPath & "\" & arrdn(i) & "\" & dn) And vbDirectory) = vbDirectory Then
                    Debug.Print "found: " & dn & " under " & arrdn(i)
                    i = cntdn ' exit outer For as well
                    Exit For
                End If
                dn = Dir
            Wend
        Next
    Next
End Sub

Open in new window

0
 

Author Comment

by:Everlas
ID: 39754862
Yes, still interested. And I'm going to check it out. In the end the task is to create a script that doesn't break the server or the computer and is more or less independent of any speciel configuration on the actual computer. And to an extent backward compatible.

I guess that if the the filesystem is very large an complex, one might create a small database as an alternative to searching the filesystem. Someday classic filesystems as such stop to exist and then we do it in another way :-)

Regards
Everlas
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Well hello again!  Glad to see you've made it this far without giving up.  In this, the fourth installment of my popular series, I'm going to cover functions and subroutines, what they are, and why they are useful.  Just in case you stumbled onto th…
Not long ago I saw a question in the VB Script forum that I thought would not take much time. You can read that question (Question ID  (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_28455246.html)28455246) Here (http…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
Suggested Courses

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question