Ordner rekursive durchsuchen. Bei Zugriffsfehler Skript fortsezten, wie

05/03/2008 - 14:11 von Stefan Kahlert | Report spam
Hallo zusammen,
hab ein Skript welches einen Ordner samt Unterordner auflistet.
Funktioniert soweit auch gut.
Das Problem ist nur, falls das Skript auf einen Ordner "trifft" auf den es
keinen Zugriff hat,
bricht bricht es ab. Soweit ach logisch :-)
Jetzt möchte ich gerne das das Skript einfach mit dem nàchsten Ordner
fortfàhrt.
Bin mit der rekursion im Detail nicht vertraut.

Ich kann mit zwar den Fehler und das Verzeichnis anzeigen lassen an dem der
Zugriff scheiterte.
Der Hintergrund ist wir haben zig Tausende "Altdaten" in unzàhligen
unterordnern.
Jetzt möchte ich natürlich nicht in jeden Ordner nachschauen ob
Berechtigungen bestehen.
Eine Liste mit Ordnern auf die der Zugriff verweigert wurde wàre Hilfreich.

Besten Dank für Eure Tips


PS. Es tritt der Fehler 70 auf "Zuigriff verweigert"

Mfg

Stefan Kahlert





hier mal der Code

on error resume next

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\temp"

Set objFolder = objFSO.GetFolder(objStartFolder)
set logfile = objFSO.opentextfile("C:\logfile.txt", 2, true,0)

Wscript.Echo objFolder.Path
Set colFiles = objFolder.Files
For Each objFile in colFiles
logfile.writeline "Datei" &objFSO.GetAbsolutePathName(objfile)
Next


ShowSubfolders objFSO.GetFolder(objStartFolder)
if err.number <> 0 then MsgBox ("Fehler Nr " & CStr(Err.Number) & ", " &
Err.Description) & objFolder.Path
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Wscript.Echo Subfolder.Path
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
logfile.writeline "Datei" &objFSO.GetAbsolutePathName(objfile)
Next

ShowSubFolders Subfolder
Next
End Sub
 

Lesen sie die antworten

#1 Pegasus \(MVP\)
05/03/2008 - 14:37 | Warnen spam
"Stefan Kahlert" wrote in message
news:
Hallo zusammen,
hab ein Skript welches einen Ordner samt Unterordner auflistet.
Funktioniert soweit auch gut.
Das Problem ist nur, falls das Skript auf einen Ordner "trifft" auf den es
keinen Zugriff hat,
bricht bricht es ab. Soweit ach logisch :-)
Jetzt möchte ich gerne das das Skript einfach mit dem nàchsten Ordner
fortfàhrt.
Bin mit der rekursion im Detail nicht vertraut.

Ich kann mit zwar den Fehler und das Verzeichnis anzeigen lassen an dem
der Zugriff scheiterte.
Der Hintergrund ist wir haben zig Tausende "Altdaten" in unzàhligen
unterordnern.
Jetzt möchte ich natürlich nicht in jeden Ordner nachschauen ob
Berechtigungen bestehen.
Eine Liste mit Ordnern auf die der Zugriff verweigert wurde wàre
Hilfreich.

Besten Dank für Eure Tips


PS. Es tritt der Fehler 70 auf "Zuigriff verweigert"

Mfg

Stefan Kahlert





hier mal der Code

on error resume next

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\temp"

Set objFolder = objFSO.GetFolder(objStartFolder)
set logfile = objFSO.opentextfile("C:\logfile.txt", 2, true,0)

Wscript.Echo objFolder.Path
Set colFiles = objFolder.Files
For Each objFile in colFiles
logfile.writeline "Datei" &objFSO.GetAbsolutePathName(objfile)
Next


ShowSubfolders objFSO.GetFolder(objStartFolder)
if err.number <> 0 then MsgBox ("Fehler Nr " & CStr(Err.Number) & ", " &
Err.Description) & objFolder.Path
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Wscript.Echo Subfolder.Path
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
logfile.writeline "Datei" &objFSO.GetAbsolutePathName(objfile)
Next

ShowSubFolders Subfolder
Next
End Sub





Falls Du bloss ein Verzeichnis aller Dateien erstellen willst, ist die
folgende Befehlszeile weitaus die einfachste Lösung, weil jemand
anders das Rad für dich schon erfunden hat:

dir /b /s c:\temp > c:\Logfile.txt

Der Befehl arbeitet rekursiv und wird auch mit gesperrten
Verzeichnissen fertig.

Ähnliche fragen