Logo faq-o-matic.net
Logo faq-o-matic.net

Was frisst den freien Platz auf meiner Festplatte?

von veröffentlicht am21. Januar 2008, 21:03 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Dateisystem   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 12. Mai 2011

Problem

Es kommt häufig vor, dass eine Festplatte fast voll ist, ohne dass man weiß, was eigentlich den ganzen Platz beansprucht. Mit Windows Explorer kann man zwar die einzelnen Verzeichnisse untersuchen, aber dies ist oft recht mühsam und führt nicht immer zum Ziel. Manche GUI-Programme bieten eine graphische Darstellung der Datenverteilung auf der Festplatte, aber viele von ihnen überspringen versteckte Verzeichnisse. Zudem können sie meist nur den aktuellen Rechner untersuchen.


Lösung

RDir („Recursive Dir“) erstellt auf der Konsole rasch eine Zusammenfassung des gewünschten Verzeichnisses und seiner Unterverzeichnisse. Mit Hilfe von psexec.exe (www.sysinternals.com) kann das Programm auch leicht auf andern Rechnern ausgeführt werden, sofern sie mit dem gegenwärtigen Rechner vernetzt sind.

Installation

Eine eigentliche Installation ist nicht nötig, bloß die folgenden zwei Schritte:
– Den Quelltext in die Datei RDir.vbs in einem Verzeichnis kopieren, das im Pfad erwähnt ist, z.B. in c:\Windows.
– Über Start / Run den folgenden Befehl ausführen: cscript //H:CScript
Bitte beachten: Das Programm braucht mindestens Internet Explorer 6.

Anwendung

RDir.vbs läuft vom Command Prompt aus und kann auf zwei Arten angewandt werden:
a) Ohne Parameter – Man tippt einfach rdir.vbs. In diesem Fall bekommt man eine Zusammenfassung des aktuellen Verzeichnisses samt aller Unterverzeichnisse.
b) Mit Parameter, also z:B. rdir.vbs „c:\Dokumente und Einstellungen“. In diesem Fall bekommt man eine Zusammenfassung des angegebenen Verzeichnisses und seiner Unterverzeichnisse.

Quelltext

  1. ‚Dieses Programm zeigt an, wie viel Platz das gewählte Verzeichnis
  2. ‚(samt Unterverzeichnissen) auf der Festplatte beansprucht.
  3. ‚20.1.2007 FNL
  4. Option Explicit
  5. Const Col1 = 16 ‚Breite der „Grösse“-Spalte
  6. Const Col2 = 7 ‚Breite der „Dateien“-Spalte
  7. Const Col3 = 37 ‚Breite der „Dateiname“-Spalte
  8. Const WshRunning = 0, WshFinished = 1, WshFailed = 2
  9. Const ForReading = 1, ForWriting = 2, ForAppending = 8
  10. Dim objStream, objFldr, objSFldr, objFl, ObjWshShell
  11. Dim Folder, NL, AccessDenied, ProblemFolder, NoFileOutput, OutputStream
  12. Dim MaxSizeS, MaxSizeF, MaxSizeD
  13. Dim MaxFilesS, MaxFilesF, MaxFilesD
  14. Dim temp, Tempname1, TempName2, Output
  15. NL = Chr(10)
  16. AccessDenied = False
  17. ‚==============
  18. ‚Hauptprogramm
  19. ‚==============
  20. Dim Help, objFSO, objArgs
  21. Set objFSO = CreateObject(„Scripting.FileSystemObject“)
  22. Set ObjWshShell = WScript.CreateObject(„WScript.Shell“)
  23. Output = ObjWshShell.Environment(„PROCESS“)(„SystemDrive“) & „\RDir.txt“
  24. Help = „RDir Version 1.0-D by Pegasus. 20.1.2008“ & NL & NL & _
  25. „Dieses Programm zeigt die Grösse des gewählten Verzeichnisses“ & NL & _
  26. „samt aller Unterverzeichnisse an. Das Resultat wird in der Datei“ & NL & _
  27. „“„“ & Output & „““ gespeichert.“ & NL & NL & _
  28. „Andwendung: rdir.vbs“ & NL & _
  29. „Oder: rdir.vbs „„Name_des_Verzeichnisses“„“
  30. Set objArgs = WScript.Arguments
  31. If objArgs.Count > 0 Then
  32. If objArgs(0) = „/?“ Or objArgs(0) = „-?“ Or objArgs(0) = „?“ Then
  33. MsgBox (Help)
  34. WScript.quit
  35. End If
  36. End If
  37. temp = ObjWshShell.Environment(„PROCESS“)(„temp“)
  38. Tempname1 = temp & „\RDir1.tmp“
  39. TempName2 = temp & „\RDir2.tmp“
  40. Err.Clear
  41. On Error Resume Next
  42. Set objStream = objFSO.OpenTextFile(Tempname1, ForWriting, True)
  43. If Err.number <> 0 Then
  44. WScript.Echo („Cannot open „ & „“„“ & Tempname1 & „“„“)
  45. WScript.Echo (Err.Description)
  46. WScript.Quit
  47. End If
  48. On Error Goto 0
  49. Folder = ObjWshShell.CurrentDirectory
  50. If objArgs.Count > 0 _
  51. Then If UCase(Right(objArgs(0),4)) <> „.VBS“ _
  52. Then Folder = objArgs(0)
  53. WScript.echo „Das gewählte Verzeichnis wird untersucht . . .“
  54. WScript.echo Folder
  55. GetMainDirectory Folder
  56. GenerateOutput
  57. objFSO.DeleteFile(TempName1)
  58. objFSO.DeleteFile(TempName2)
  59. Set objStream = Nothing
  60. Set objFSO = Nothing
  61. ‚————————————————-
  62. ‚Schreib eine Liste aller Dateien in tempfile2.txt
  63. ‚————————————————-
  64. Sub GetMainDirectory(Folder)
  65. Dim objFSO, files, iSize, path
  66. Set objFSO = CreateObject(„Scripting.FileSystemObject“)
  67. ‚ Process main directory
  68. files = 0
  69. iSize = 0
  70. If Not objFSO.FolderExists(Folder) Then
  71. WScript.Echo NL & „Fehlermeldung: Verzeichnis „„“ & Folder & „““ nicht gefunden.“
  72. WScript.quit
  73. End If
  74. Set objFldr = objFSO.GetFolder(Folder)
  75. Err.clear
  76. On Error Resume Next
  77. For Each objFl In objFldr.Files
  78. If Err.number <> 0 Then
  79. WScript.Echo („Das Verzeichnis „„“ & Folder & „““ ist gesperrt.“)
  80. WScript.Echo Err.Description
  81. WScript.Quit
  82. End If
  83. files = files + 1
  84. iSize=iSize + objFl.Size
  85. Next
  86. On Error Goto 0
  87. objStream.writeline(Pad(iSize) & „?“ & files & „?“ & Folder)
  88. MaxSizeS = iSize
  89. MaxSizeF = files
  90. MaxSizeD = Folder
  91. MaxFilesS = files
  92. MaxFilesF = files
  93. MaxFilesD = Folder
  94. ‚ Process subdirectories
  95. For Each objSFldr In objFldr.SubFolders
  96. If Right(Folder,1) = „\“ Then
  97. path = Folder & objSFldr.name
  98. Else
  99. path = Folder & „\“ & objSFldr.Name
  100. End If
  101. files = 0
  102. iSize=0
  103. WScript.Echo path
  104. GetSubdirectory path, files, iSize
  105. objStream.writeline Pad(iSize) & „?“ & files & „?“ & path
  106. Next
  107. objStream.Close
  108. End Sub
  109. ‚————————————
  110. ‚Bearbeite jedes Verzeichnis rekursiv
  111. ‚————————————
  112. Sub GetSubdirectory(path, files, iSize)
  113. Dim objFSO, p, f, s, denied
  114. Set objFSO = CreateObject(„Scripting.FileSystemObject“)
  115. Set objFldr = objFSO.GetFolder(path)
  116. f = 0
  117. s = 0
  118. denied=False
  119. Err.Clear
  120. On Error Resume Next
  121. For Each objFl In objFldr.Files
  122. If Err.number <> 0 Then
  123. path = path & “ („ & Err.Description & „)“
  124. denied = True
  125. AccessDenied = True
  126. ProblemFolder = path
  127. Exit For
  128. End If
  129. f = f + 1
  130. s = s + objFl.Size
  131. Next
  132. On Error Goto 0
  133. files = files + f
  134. iSize = iSize + s
  135. If s > MaxSizeS Then
  136. MaxSizeS = s
  137. MaxSizeF = f
  138. MaxSizeD = path
  139. End If
  140. If f > MaxFilesF Then
  141. MaxFilesS = s
  142. MaxFilesF = f
  143. MaxFilesD = path
  144. End If
  145. If Not denied Then
  146. For Each objSFldr In objFldr.SubFolders
  147. p = path & „\“ & objSFldr.Name
  148. GetSubdirectory p, files, iSize
  149. Next
  150. End If
  151. End Sub
  152. ‚—————————————————-
  153. ‚Schreib das Resultat sortiert in die temporäre Datei
  154. ‚—————————————————-
  155. Sub GenerateOutput
  156. Const name=0, size=1, files=2
  157. Dim ObjExec, objFSO, ObjWshShell
  158. Dim file, InputFile, index
  159. Dim line, i, j, k, p
  160. Dim TotalF, TotalS, cmd
  161. Dim sName, sSize, iSize, iFiles, elements
  162. Set objFSO = CreateObject(„Scripting.FileSystemObject“)
  163. Set ObjWshShell = WScript.CreateObject(„WScript.Shell“)
  164. NoFileOutput = False
  165. index = 0
  166. TotalF = 0
  167. TotalS = 0
  168. ‚Die temporäre Datei sortieren
  169. cmd = „%comspec% /c type „„“ & Tempname1 & „““ | sort > „„“ & TempName2 & „“
  170. Set ObjExec = ObjWshShell.Exec(cmd)
  171. Do While ObjExec.Status = WshRunning
  172. WScript.Sleep 100
  173. Loop
  174. Err.Clear
  175. On Error Resume Next
  176. Set InputFile = objFSO.OpenTextFile(Tempname2)
  177. If Err.number <> 0 Then
  178. WScript.Echo („Cannot access „„“ & TempName2 & „“„.“)
  179. WScript.Echo Err.Description
  180. WScript.Quit
  181. End If
  182. Err.Clear
  183. Set OutputStream = objFSO.CreateTextFile(Output)
  184. If Err.number <> 0 Then
  185. ‚ WScript.Echo Err.Description & „(„““ & Output & „““)“
  186. NoFileOutput = True
  187. End If
  188. On Error Goto 0
  189. ‚Zusammenfassung auf den Bildschirm schreiben
  190. WScript.Echo
  191. Call Result(“ Zusammenfassung“)
  192. Call Result(“ ============================================“)
  193. ‚Zeilen aus der temporären Datei bearbeiten
  194. While Not InputFile.AtEndOfStream
  195. line = InputFile.ReadLine
  196. elements = Split(LTrim(line), „?“)
  197. sSize = Left(line, Col1)
  198. iSize = LTrim(sSize)
  199. iFiles = elements(1)
  200. sName = elements(2)
  201. TotalS = TotalS + iSize
  202. TotalF = TotalF + iFiles
  203. Call Result(Format(sSize,Col1) & Format(iFiles, Col2) & SFormat(sName, 54))
  204. Wend
  205. InputFile.Close
  206. Call Result(Format(TotalS, Col1) & Format(TotalF, Col2) & „(Total)“)
  207. Call Result(„“)
  208. Call Result(Format(MaxSizeS, Col1) & Format(MaxSizeF, Col2) & SFormat(MaxSizeD, Col3) & “ (am meisten Speicherplatz)“)
  209. Call Result(Format(MaxFilesS, Col1) & Format(MaxFilesF, Col2) & SFormat(MaxFilesD, Col3)& “ (am meisten Dateien)“)
  210. WScript.echo
  211. If NoFileOutput Then
  212. WScript.Echo „Kann das Resultat nicht in die Datei „„“ & Output & „““ schreiben.“
  213. Else
  214. WScript.Echo „Das Resultat ist auch in „ & Output & “ gespeichert.“
  215. End If
  216. If AccessDenied Then
  217. Call Result(„“)
  218. Call Result(„Warnung: Die Dateien im folgenden Verzeichnis waren nicht zugänglich:“)
  219. Call Result(ProblemFolder)
  220. End If
  221. if not NoFileOutput then OutputStream.Close
  222. End Sub
  223. ‚———————————————————-
  224. ‚Formattiere eine Zahl entsprechend den Landeseinstellungen
  225. ‚und füge zusätzliche Abstände nach Bedarf hinzu.
  226. ‚———————————————————-
  227. Function Format(number, pos)
  228. Const Decimals = 0 ‚No. of decimals to be shown
  229. Const GroupDigits= –1 ‚Group digits according to regional settings
  230. Dim formatted
  231. formatted = FormatNumber(number, Decimals, GroupDigits)
  232. If pos > Len(formatted) Then formatted = _
  233. Left(“ „, pos – Len(formatted)) & formatted & “ „
  234. Format = formatted
  235. End Function
  236. ‚—————————————————-
  237. ‚Entferne genügend Zeichen am Anfang eines Namens, so
  238. ‚dass die zulässige Länge nicht überschritten wird.
  239. ‚—————————————————-
  240. Function SFormat(name, length)
  241. If Len(name) > length Then
  242. name=„..“ & Right(name, length – 2)
  243. End If
  244. SFormat=name
  245. End Function
  246. ‚—————————————
  247. ‚Schreib ein Resultat auf den Bildschirm
  248. ‚und in die Ausgangsdatei.
  249. ‚—————————————
  250. Sub Result(line)
  251. WScript.Echo line
  252. if not NoFileOutput then OutputStream.WriteLine(line)
  253. End Sub
  254. ‚—————————————————————-
  255. ‚Füge links Abstände hinzu, bis die Länge „Col1“ Zeichen beträgt.
  256. ‚—————————————————————-
  257. Function Pad(number)
  258. Pad = Left(“ „, Col1 – Len(number)) & number
  259. End Function

© 2005-2019 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!