[VBSrcipt] Ordner mit mehr als 256 Zeichen finden

KlaDi

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Skript geschrieben, das mir alle Ordner inklusive Pfad mit mehr als 256 Zeichen auflisten soll. Eigentlich sollte das ja von Windows von vornerein unterbunden werden, aber die Praxis zeigt, man schafft es doch immer wieder.
Also mein Skript soll ein Netzlaufwerk scannen und alle Ordner inklusive Pfad auflisten, die mehr als 256 Zeichen haben.
Hier mal mein Code:
Code:
Option Explicit
	Dim Pfad
		Pfad = "Q:\"
	Dim File
	Dim fso
		Set fso = CreateObject("Scripting.FileSystemObject") 
	
	Dim Folder
		Set Folder = fso.GetFolder(Pfad)
	findFiles Folder
WScript.Quit

Sub findFiles(Strfolder) 
	Dim fso
		Set fso = WScript.CreateObject("Scripting.FileSystemObject")
	Dim Folder
		Set Folder = fso.GetFolder(StrFolder) 
	Dim SubFolder
	
	For Each SubFolder in folder.SubFolders
		findFiles SubFolder
		addtoFile "Länge: " & SubFolder & " " & SubFolder & "<br>", "C:\over256.htm" 
	Next
End Sub

Function addtoFile (ByRef inhaltLog, ByRef clientname)
	SET fso = CreateObject ("Scripting.FileSystemObject")
	DIM clientlog
		SET clientlog = fso.OpenTextFile (clientname,8,TRUE)
	
	'Logdatei schreiben:
	clientlog.Writeline inhaltLog
		
	clientlog.close
End Function

Mein Problem ist, das mein Skript in dieser Zeile einen Fehler erzeugt, wenn der Ordner inklusive Pfad mehr als 256 Zeichen hat:
Code:
For Each SubFolder in folder.SubFolders
gruß klaus.
 
Hi.

Man kann das Limit umgehen, indem man den Pfad mit \\?\ beginnt:
Code:
Pfad = "\\?\Q:\"

Gruß

PS: Es ist übrigens unnötig jedesmal in der findFiles Prozedur ein neues FilesystemObject zu erstellen. Die GetFolder Methode liefert keinen String, sondern ein Folder Objekt!
 
Zuletzt bearbeitet:
Hi deepthroat,

funktioniert wunderbar.

Vielen Dank!

gruß klaus.

PS: Dann müsste ich das FilesystemObject aber als globale Variable definieren!?
 
Morgen!
PS: Dann müsste ich das FilesystemObject aber als globale Variable definieren!?
Das FilesystemObject brauchst du doch in der findFiles Prozedur gar nicht. Du übergibst doch schon ein Folder Objekt (von daher ist der Name strFolder sehr irreführend, weil es sich nicht um einen String handelt).
Visual Basic:
Sub findFiles(folder) 
	Dim SubFolder
	
	For Each SubFolder in folder.SubFolders
		findFiles SubFolder
		addtoFile "Länge: " & SubFolder & " " & SubFolder & "<br>", "C:\over256.htm" 
	Next
End Sub
Gruß
 

Neue Beiträge

Zurück