Avatar billede fhansen82 Mester
31. juli 2013 - 22:47 Der er 13 kommentarer og
1 løsning

Udlæsning af folderstørrelser i bestemt niveau

Hej

Jeg har fundet noget kode på nettet og rettet til efter mit behov. Dog mangler jeg et lille tvist. Jeg vil gerne udlæse størrelse og navn på specifik folder. Derudover vil jeg gerne udlæse navn og størrelse på denne mappes undermapper, men kun ét niveau ned. Undermappers undermapper er ikke interessante. I koden jeg har indsat nederst, har jeg en idé om at denne funktion skal indsættes, men jeg kan ikke regne ud hvordan. Har fundet lidt på nettet, men ikke noget jeg forstod at implementere. Jeg vil gerne kunne bestemme niveauet for hvor langt der skal søges ned i undermapper, hvis det kan lade sig gøre. Ellers er det fint med blot ét niveau ned. Lige nu er koden opbygget sådan, at man starter scriptet, og udvælger den mappe man vil foretage søgningen i. Hovedmappen er inkluderet i søgningen, så man får således navn og størrelse med på denne. Alle undermapper ét niveau under skal herefter listes med navne og størrelser. Går ud fra at selve koden sikkert er simpel, men er for ny i VBScript til selv at regne den ud.
Hvis der er behov for at jeg indsætter hele koden, kan dette arrangeres.

Function ShowFolderDetails(oF)
    On Error Resume Next
    objTextFile.WriteLine(oF.Name&";"&oF.Size /1024/1024&";"&oF.Files.Count&";"&oF.Subfolders.count)
'    objTextFile.WriteLine(oF.Size /1024/1024)
'    objTextFile.WriteLine(oF.Files.Count)
'    objTextFile.WriteLine(oF.Subfolders.count)
    'Comment out the following line and the loop to end the statement
    'to list all subfolders.(End Loop is 6 lines down)
    Do While folderCount < 1
        for each F in oF.Subfolders
            ShowFolderDetails F
        Next
        folderCount = folderCount + 1
    Loop
End Function
Avatar billede supertekst Ekspert
01. august 2013 - 10:03 #1
Forslag (indsat i et regneark - så kunne data evt. indsættes heri)

Sub test()
    hentFolderData "D:\Kunder"
End Sub
Private Function hentFolderData(mappeNavn)
    Dim fs, f, f1, fc
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(mappeNavn)
   
    For Each fc In f.subfolders
        navn = fc.Name
        størrelse = fc.Size
    Next
End Function
Avatar billede supertekst Ekspert
01. august 2013 - 10:09 #2
version 2

Sub test()
    hentFolderData "D:\Kunder"
End Sub
Private Function hentFolderData(mappeNavn)
Dim fs, f, f1, fc
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(mappeNavn)
   
    overmappeNavn = f.Name
    overmappeStørrelse = f.Size
   
    For Each fc In f.subfolders
        navn = fc.Name
        størrelse = fc.Size
    Next
End Function
Avatar billede fhansen82 Mester
01. august 2013 - 10:12 #3
Jeg er desværre ikke med. Kan ikke gennemskue dit svar i forhold til mit spørgsmål og hvor koden skal indsættes eller hvor den skal erstatte. Er din kode ikke også VBA? Syntes ikke jeg ser Sub() i VBScript, men igen, jeg er grøn i det her. Hvis muligt vil jeg meget gerne bede om evt. tilretning af den kode jeg har lagt, eller en god forklaring til forslag :O)
Jeg kan heller ikke vurdere, om det er et stykke kode, hvor jeg selv kan bestemme hvor dybt der søges. Det eneste jeg mangler er blot hvordan jeg kan styre hvor dybt der søges, og gerne ud fra den kode jeg allerede har, så jeg ikke skal lave for meget om.

På forhånd mange tak for input :O)

Frank
Avatar billede fhansen82 Mester
01. august 2013 - 10:23 #4
Meget mærkeligt. Det er lige nu hip som hap om undermapper til undermapper bliver inkluderet i den endelige liste. Nogle steder jeg søger, tager den kun undermapper med fra første niveau. Andre steder tager den undermappers undermapper. Tror lige jeg poster hele koden. Den tror jeg ikke selv jeg nogensinde regner ud.
Avatar billede fhansen82 Mester
01. august 2013 - 10:23 #5
'==========================================================================
' NAME: folderSize.vbs
' COMMENT: Scans folder sizes of a selected folder.
'==========================================================================
Dim objFSO, objFolder, objTextFile, F, myVar1, myVar2, folderCount

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
folderCount = 0

Call browseFolder(strFolderSrc,"Source")
Set objFolder = objFSO.GetFolder(strFolderSrc)

'Get username
Set objShell = CreateObject("Wscript.Shell")
strUser = objShell.ExpandEnvironmentStrings("%USERPROFILE%")

'Write Header Row
Set objTextFile = objFSO.CreateTextFile(strUser&"\Desktop\Folder_Result.csv", True, True)
objTextFile.WriteLine("Folder Name"&";"&"Size (MB)"&";"&"# Files"&";"&"# Sub Folders")
Wscript.Sleep 300

'Collected and insert data
ShowFolderDetails objFolder

MsgBox "Complete. The file ""Folder_Result.csv"" was placed on your desktop."

Set objFSO = Nothing
Set objFolder = Nothing
Set objTextFile = Nothing
Set F = Nothing
Set myVar1 = Nothing
Set myVar2 = Nothing
Set folderCount = Nothing

WScript.Quit
 
'==========================================================================
'Functions
Function ShowFolderDetails(oF)
    On Error Resume Next
    objTextFile.WriteLine(oF.Name&";"&oF.Size /1024/1024&";"&oF.Files.Count&";"&oF.Subfolders.count)
    'Comment out the following line and the loop to end the statement
    'to list all subfolders.(End Loop is 6 lines down)
    Do While folderCount < 1
        for each F in oF.Subfolders
            ShowFolderDetails F
        Next
        folderCount = folderCount + 1
    Loop
End Function

' browseFolder brings up the selection box to choose both the source and the destination.
Function browseFolder(myVar1,myVar2)
    Const WINDOW_HANDLE = 0
    Const NO_OPTIONS = 0
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder _
        (WINDOW_HANDLE, "Select a " & myVar2 & " folder:", NO_OPTIONS, "C:\\Scripts")
    On Error Resume Next
    Set objFolderItem = objFolder.Self
    objPath = objFolderItem.Path
    myVar1 = objPath
    Call objPathChk(myVar1)
End Function

' objPathChk checks to make sure that a source has been selected.
Function objPathChk(myVar1)
    If myVar1 = "" Then
        MsgBox "Scan Folder Not Specified." & VbCrLf & _
                "Scan will now quit.", vbOKOnly, "Terminate"
        WScript.Quit
    End If       
End Function
'==========================================================================
Avatar billede supertekst Ekspert
01. august 2013 - 10:35 #6
Ok - jeg arbejder med Microsoft Office og har derfor vist en mulig kode indsat i en Excel-fil.

Men det er måske ikke en mulighed?
Avatar billede fhansen82 Mester
01. august 2013 - 10:53 #7
Pas. Jeg ved at VBScript læner sig op ad VBA (Office), men alligevel er der vist lidt forskel. Den kode jeg har er gemt i en tekst fil som .VBS og køres helt uden om Excel.
Avatar billede supertekst Ekspert
01. august 2013 - 11:01 #8
Ja - det er jeg med på og så er anvendelse af VBA ikke en mulighed?
Avatar billede fhansen82 Mester
01. august 2013 - 11:10 #9
Min viden er meget lille omkring VBS og VBA, samt hvilke forskelle og ligheder der er i koden. Det kan jeg ikke lige gennemskue. Jeg prøver mig lidt frem med det kode jeg nu kan finde på nettet, med både større og mindre held :O) Jeg kan dog ikke selv regne ud, hvordan jeg kan styre dybden af søgningen. Samt hvordan jeg indlogerer det i den kode jeg har fået opbygget end til nu.
Avatar billede fhansen82 Mester
01. august 2013 - 11:43 #10
Nu forstår jeg hvorfor det virker nogle gange og nogle gange ikke. Koden kigger på en mappe. hvis den har en undermappe, kigger den i den. Har den to undermapper, kigges der kun i den første. Hvis den første undermappe har en undermappe, kigges der også i den. Det er bestemt ikke det jeg vil. Vil blot have alle undermapper vist i den hovedmappe jeg vælger, og kun ét niveau ned.
Avatar billede fhansen82 Mester
01. august 2013 - 11:45 #11
Det er noget vrøvl jeg skriver. Se bort fra det jeg lige har fundet ud af. Det passer slet ikke.
Avatar billede fhansen82 Mester
01. august 2013 - 11:48 #12
Til gengæld lader det til, at den kigger i alle undermappers undermapper i den første undermappe den søger i i hovedmappen.
Avatar billede fhansen82 Mester
25. august 2013 - 20:58 #13
Jeg har stadig brug for hjælp til at løse denne opgave. Koden skal være til VBS, da office ikke er installeret på de maskiner, som jeg gerne vil benytte scriptet på.
Avatar billede fhansen82 Mester
16. september 2013 - 13:12 #14
Jeg lukker spørgsmålet her. Har ikke fået løsning på spørgsmålet. Jeg fik lov at benytte GetFolderSize 3. parts software til at udlæse folderstørrelser på server.
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