Avatar billede systemnissen Nybegynder
27. oktober 2003 - 10:06 Der er 8 kommentarer og
1 løsning

Søg efter en fil

Jeg har et script som kører "udenfor" Windows (i et PE miljø). Jeg har mappet et drev og vil gerne søge efter en fil. Altså: finde en fil (test.ini) på R:\test\

Hvordan kan jeg gøre det? Har FSO nogle funktioner her?

Håber på hurtigt svar.

Med venlig hilsen

Systemnissen
Avatar billede medions Nybegynder
27. oktober 2003 - 10:12 #1
Fx.

        strFilSti = "sti/sti"
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objMappe = objFSO.GetFolder(strFilSti)
       
        For Each Item in objMappe.Files
            If objMappe.Name = "test.ini" Then
                              '...
                        End If
        Next

//>Rune
Avatar billede Slettet bruger
27. oktober 2003 - 10:17 #2
medions: Du tager da ikke underkataloger med?

Systemnissen: Prøv at se på

http://www.eksperten.dk/spm/413095
Avatar billede systemnissen Nybegynder
27. oktober 2003 - 12:15 #3
Er der ikke en metode som gør det muligt at søge efter et dir eller en fil, uden at skulle kalde det vha. kommandoprompten? Altså uden brug af "ekstra" filer? Det der skal søges efter er en unik værdi...
Avatar billede Slettet bruger
27. oktober 2003 - 12:23 #4
Du kan da godt skrive scriptet i spørgsmål 413095 om, så det ikke tager argumenter fra kommandolinjen! Du kan jo inkludere koden i dit ejet script, og sætte "path" og "pattern" variablene inde i scriptet. Du kan evt. lægge koden ind i en function, der returnerer et array af filer der matcher dit pattern.

Der er ikke nogen indbygget søge-funktion i VBScript, så du bliver under alle omstændigheder selv nød til at skrive koden!
Avatar billede adam_christensen Nybegynder
27. oktober 2003 - 13:35 #5
Rekursion er nøglen når man skal traversere i filsystemet. Jeg har bikset noget hurtigt sammen nedenfor; måske du kan bruge det:

Set fso = CreateObject("Scripting.FileSystemObject")

sSearchFrom = "c:\"
sFileToSearchFor = "test.ini"

'Global boolean variable to terminate the search upon 1st match
bFileFound = False

Function FindFile(p_sFromFolder, p_sFileName)
  If bFileFound Then
      Exit Function
  End If

  Set oCurFolder = fso.GetFolder(p_sFromFolder)

  If fso.FileExists(p_sFromFolder & p_sFileName) Then
        MsgBox "'" & p_sFileName & "' found in '" & p_sFromFolder & "'."
        bFileFound = True
        Exit Function
  End If

  For Each subfolder in oCurFolder.SubFolders
      If fso.FileExists(p_sFromFolder & "\" & subfolder.Name & "\" & p_sFileName) Then
        MsgBox "'" & p_sFileName & "' found in '" & p_sFromFolder & "\" & subfolder.Name & "'."
        bFileFound = True
        Exit Function
      Else
        'Do a recursive call to search in subfolders
        FindFile p_sFromFolder & "\" & subfolder.Name, p_sFileName
      End If
  Next
End Function

'Disable error handling in case of any permission problems on folders
On Error Resume Next

'Start the search
FindFile sSearchFrom, sFileToSearchFor

If Not bFileFound Then
  MsgBox "'" & sFileToSearchFor & "' not found!"
End If

Set fso = Nothing
Set oCurFolder = Nothing
Avatar billede Slettet bruger
28. oktober 2003 - 10:58 #6
adam christensen> Øhm, ud over at du bruger FileExists til at bestemme om en fil eksisterer i stedet for den mere generelle regExp, kan jeg ikke se hvad forskellen er på din kode, og den jeg refererer til i http://www.eksperten.dk/spm/413095?
Avatar billede adam_christensen Nybegynder
28. oktober 2003 - 11:04 #7
jjust> Der er såmænd ingen, bortset fra at den kode jeg postede her var lavet præcist som systemnissen efterspurgte. Systemnissen skrev jo (27/10-2003 12:15:38) at spm 413095 var for "besværligt" ;-)
Avatar billede systemnissen Nybegynder
28. oktober 2003 - 12:12 #8
Tak for hjælpen til alle... Adam løb med pointene da han kom med den løsning jeg præcist havde brug for. Tak for det!

Systemnissen
Avatar billede Slettet bruger
28. oktober 2003 - 12:29 #9
adam christensen> Jamen, det er da rigtigt!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester