Filesystem in Datei speichern

05/03/2008 - 12:10 von Stefan Baumgart | Report spam
Hallo NG,

ich habe folgendes Problem:
Ich möchte alle Ordner und Dateien mit den Eigenschaften für Name, Attribute, Größe, Änderungsdatum
in einer Datei speichern, um spàter diese Datei wieder zu laden und mit dem aktuellen Stand der
Ordner und Dateien vergleichen zu können. Auf diese Art möchte ich z.B. gelöschte oder hinzugefügte
Dateien ausgeben können.

Ich habe bereits einige Ansàtze mit ADODB, dem FileSystemObject und XML probiert, bin aber noch
nicht auf eine brauchbare Lösung gekommen.

- Mit ADODB kann man nur(?) Internetpfade ansprechen
- FSO bietet keine Möglichkeit der Speicherung in TXT oder XML-Dateien (um diese anschließend wieder
zu laden)
- gleiches gilt für das Dictionary-Objekt

Hat jemand eine Idee, wie ich das Problem angehen müsste?

Vielen Dank
Stefan Baumgart
 

Lesen sie die antworten

#1 Pegasus \(MVP\)
05/03/2008 - 16:58 | Warnen spam
"Stefan Baumgart" wrote in message
news:
Hallo NG,

ich habe folgendes Problem:
Ich möchte alle Ordner und Dateien mit den Eigenschaften für Name,
Attribute, Größe, Änderungsdatum in einer Datei speichern, um spàter diese
Datei wieder zu laden und mit dem aktuellen Stand der Ordner und Dateien
vergleichen zu können. Auf diese Art möchte ich z.B. gelöschte oder
hinzugefügte Dateien ausgeben können.

Ich habe bereits einige Ansàtze mit ADODB, dem FileSystemObject und XML
probiert, bin aber noch nicht auf eine brauchbare Lösung gekommen.

- Mit ADODB kann man nur(?) Internetpfade ansprechen
- FSO bietet keine Möglichkeit der Speicherung in TXT oder XML-Dateien (um
diese anschließend wieder zu laden)
- gleiches gilt für das Dictionary-Objekt

Hat jemand eine Idee, wie ich das Problem angehen müsste?

Vielen Dank
Stefan Baumgart



Am einfachsten ist natürlich der folgende Befehl:

dir /s "d:\Meine Dateien" > c:\Dateien.txt

Dabei ist allerdings der Zusammenhang zwischen Datei- und Verzeichnisname
leicht gestört. Wenn Du diesen Zusammenhang behalten willst, könntest Du
das folgende Program brauchen. Anschliessend musst Du Dir allerdings
überlegen, was Du mit der Flut von Dateinamen anfangen willst . . .

Du kannst das Programm auf zwei Arten aufrufen:
cscript //nologo xxx.vbs (liefert alle Dateien im gegenwàrtigen
Verzeichnis)
cscript //nologo xxx.vbs "d:\Meine Dateien"

1. Option Explicit
2.
3. Dim objFSO, objArgs, objWshShell
4. Dim Folder, SysDrive, CurrFolder, Tab, DQ
5.
6. Set objArgs = WScript.Arguments
7. Set objFSO = CreateObject("Scripting.FileSystemObject")
8. Set objWshShell = WScript.CreateObject("WScript.Shell")
9. SysDrive = objWshShell.Environment("PROCESS")("SystemDrive")
10.
11. Dim Tempname: Tempname = SysDrive & "\dir.tmp"
12. Dim Outname: Outname = SysDrive & "\Files.txt"
13. Tab = Chr(9)
14. DQ = """"
15.
16. GetParm
17. GetFiles (Folder)
18. objFSO.DeleteFile Tempname
19. WScript.Echo "Output is available in " & Outname
20.
21. '=". 'Read all file names into memory.
23. 'Write the rearranged components into the output file.
24. '
25. Sub GetFiles (F)
26. Dim CR, File1, File2, Line, i
27. Dim FileList, CompiledLine
28.
29. if right(F,1) <> "\" then F = F & "\"
30. WScript.Echo "Compiling a file list for " & DQ & F & DQ & "..."
31. objWshShell.Run "%ComSpec% /U /c dir /s /a-d /-c " _
32. & DQ & F & "*.*" & DQ & " > " & Tempname, 0, True
33.
34. Set File1 = objFSO.OpenTextFile(Tempname, 1)
35. FileList = File1.Read(objFSO.GetFile(Tempname).Size) 'Read the file
list into memory
36. File1.Close
37.
38. 'Extract the individual file names from FileList
39. Set File2 = objFSO.OpenTextFile(Outname, 2, True)
40. i = 1
41. Do
42. CR = InStr(i, FileList, Chr(13))
43. If CR > 0 Then 'At EOF
44. Line = Replace(Mid(FileList, i, CR - i), Chr(0), "")
45. i = CR + 3
46. Else 'Not at EOF
47. Line = Replace(Mid(FileList, i), Chr(0), "")
48. i = Len(FileList) + 1
49. End If
50.
51. CompiledLine = Compile(Line) 'Re-arrange the file name details
52. If CompiledLine <> "" Then
53. File2.WriteLine(CompiledLine)
54. End If
55. Loop Until i >= Len(FileList)
56. File2.close
57. End Sub
58.
59. '-
60. 'Extract & remember the current folder name.
61. 'Rearrange the file details: File name, size, Path+File name, file date
62. '-
63. Function Compile (Line)
64. Const dir = 15 'Location of directory name field
65. Const slash = 7 'Location of slash in the date field
66. Const N = 41 'Start of file name field
67. Const S = 24 'Start of file size field
68. Const SL= 16 'Length of file size field
69. Const D = 5 'Start of file date field (suppressing the DOW)
70. Const DL= 17 'Length of file date field
71.
72. Compile = ""
73. if Line = "" then Exit Function
74. If Mid(Line, slash, 1) = "/" Then
75. Compile = CurrFolder & Trim(Mid(line, N)) & Tab _
76. & Trim(Mid(Line, S, SL)) & Tab & Trim(Mid(line, D, DL))
77. Exit Function
78. End If
79. If InStr(Line, " Directory of ") = 1 Then
80. CurrFolder = Mid(line, dir) 'Extract the current folder name
81. if Right(CurrFolder, 1) <> "\" then CurrFolder = CurrFolder & "\"
82. WScript.Echo "Processing " & DQ & CurrFolder & DQ
83. End If
84.
85. End Function
86. '
87. 'Get the command line parameter
88. '
89. Sub GetParm
90. Dim i, help, ObjFldr
91.
92. If objArgs.Count = 0 Then
93. Set ObjFldr = objFSO.GetFolder(".")
94. Folder = objFSO.GetAbsolutePathName(ObjFldr) 'Get the working
directory
95. Exit Sub
96. End If
97.
98. Folder = objArgs(0)
99. If Not objFSO.FolderExists(Folder) Then
100. WScript.echo
101. WScript.Echo "Folder " & DQ & Folder & DQ & " does not exist."
102. WScript.Quit
103. End If
104. End Sub

Ähnliche fragen