31. juli 2013 - 22:47Der 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
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
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)
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.
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.
'========================================================================== ' 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 '==========================================================================
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.
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.
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.
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å.
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.
Synes godt om
Ny brugerNybegynder
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.