Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Kritische Pfadlänge für Benutzer kenntlich machen (Script)

Anleitung Entwicklung Batch & Shell

Mitglied: manuel-r

manuel-r (Level 2) - Jetzt verbinden

06.03.2014, aktualisiert 12:35 Uhr, 10517 Aufrufe, 12 Kommentare, 9 Danke

Wir alle kennen das Problem mit den zu langen Pfaden und allem was es an Problemen mit sich bringt.
Dummerweise hat MS es bis heute nicht geschafft das für den Benutzer brauchbar kenntlich zu machen und Fehlbedienung abzufangen.

Ich habe mich daher vor einiger Zeit mal dran gesetzt und ein kleines Script geschrieben. Nachdem dieses Script ein Verzeichnis und seine Unterverzeichnisse bearbeitet hat sieht das etwa so aus. Die gewählten Icons dürften ziemlich selbsterklärend sein:

1ed8494129c46cc9814f0e1e6b102b4d - Klicke auf das Bild, um es zu vergrößern

Einen kleinen Haken hat das Script:
Die Pfadlänge die i.d.R. die Probleme verursacht ist die einschließlich des Dateinamens und Erweiterung. Da ich das Problem optisch lösen wollte konnte ich natürlich nicht die Icons der einzelnen Dateien manipulieren. Meine User würden mich umbringen, wenn ein PDF oder JPG plötzlich anders aussieht. Also habe ich bei mir die kritische Pfadlänge mit 200 Zeichen und die Länge aber der gewarnt wir mit 170 Zeichen gesetzt. Damit stehen dann bei einem Verzeichnis mit "rot" immer noch 50 Zeichen für Dateinamen zur Verfügung. Die Grenzwerte kann aber jeder halten wie er will.

Genug der Vorrede. Hier kommt das Script das einfach als "SetFolderWarnIcon.vbs" gespeichert wird:
01.
set objFilesys = CreateObject("Scripting.FilesystemObject") 
02.
intArgsCount = wscript.arguments.count 
03.
 
04.
if intArgsCount <> 4 then 
05.
	wscript.echo "Falsche oder fehlende Argumente!" & vbCRLF & "Syntax: SetFolderWarnIcon <WARN-Länge> <ATTN-Länge> <EchoOn|EchoOff> <Basisverzeichnis>" 
06.
	wscript.quit 
07.
end if 
08.
 
09.
intFolderLenWarn  = cint(wscript.arguments(0)) 
10.
intFolderLenAttn  = cint(wscript.arguments(1)) 
11.
strListOn = wscript.arguments(2) 
12.
strSearchPath = wscript.arguments(3) 
13.
if right(strSearchPath,1) <> "\" then 
14.
	strSearchPath = strSearchPath & "\" 
15.
end if 
16.
 
17.
strDesktopIniOk = objFilesys.GetParentFoldername(wscript.ScriptFullname) & "\" & "desktop_ok.ini" 
18.
strDesktopIniWarn = objFilesys.GetParentFoldername(wscript.ScriptFullname) & "\" & "desktop_warn.ini" 
19.
strDesktopIniAttn = objFilesys.GetParentFoldername(wscript.ScriptFullname) & "\" & "desktop_attn.ini" 
20.
 
21.
wscript.echo "Verzeichnislänge für Symbol WARN: " & intFolderLenWarn & vbcrlf & "Verzeichnislänge für Symbol ATTN: " & intFolderLenAttn & vbcrlf & "Basisverzeichnis: " & strSearchPath 
22.
 
23.
'intFolderLenWarn = 50 
24.
'intFolderLenAttn = 80 
25.
 
26.
ListFoldersInFolder strSearchPath 
27.
'wscript.echo "Fertig. Alle Verzeichnisse in " & strSearchPath & "geprüft und Icons eingerichtet." 
28.
 
29.
Sub ListFoldersInFolder(strSearchPath) 
30.
	on error resume next 
31.
	set objFolderContent = objFilesys.GetFolder(strSearchPath) 
32.
	for each strSubFolder in objFolderContent.Subfolders 
33.
		'pfadlänge kürzer als WARN-Schwelle 
34.
		if len(strSubFolder) < intFolderLenWarn then 
35.
			if lcase(strListOn) = "echoon" then 
36.
				wscript.echo "Ok: " & strSubFolder 
37.
			end if 
38.
			if strSubFolder.Attributes and 1 then 
39.
				'+r für ordner schon gesetzt 
40.
				objFilesys.CopyFile strDesktopIniOk, strSubFolder & "\desktop.ini" 
41.
			else 
42.
				'+r für ordner setzen 
43.
				strSubFolder.Attributes = strSubFolder.Attributes + 1 
44.
				objFilesys.CopyFile strDesktopIniOk, strSubFolder & "\desktop.ini" 
45.
			end if 
46.
		end if 
47.
		'pfadlänge über WARN-Schwelle aber unter ATTN-Schwelle 
48.
		if len(strSubFolder) => intFolderLenWarn and len(strSubFolder) <= intFolderLenAttn then 
49.
			if lcase(strListOn) = "echoon" then 
50.
				wscript.echo "Warn: " & strSubFolder 
51.
			end if 
52.
			if strSubFolder.Attributes and 1 then 
53.
				'+r für ordner schon gesetzt 
54.
				objFilesys.CopyFile strDesktopIniWarn, strSubFolder & "\desktop.ini" 
55.
			else 
56.
				'+r für ordner setzen 
57.
				strSubFolder.Attributes = strSubFolder.Attributes + 1 
58.
				objFilesys.CopyFile strDesktopIniWarn, strSubFolder & "\desktop.ini" 
59.
			end if 
60.
		end if 
61.
		'pfadlänge über ATTN-Schwelle 
62.
		if len(strSubFolder) > intFolderLenAttn then 
63.
			if lcase(strListOn) = "echoon" then 
64.
				wscript.echo "Attn: " & strSubFolder 
65.
			end if 
66.
			if strSubFolder.Attributes and 1 then 
67.
				'+r für ordner schon gesetzt 
68.
				objFilesys.CopyFile strDesktopIniAttn, strSubFolder & "\desktop.ini" 
69.
			else 
70.
				'+r für ordner setzen 
71.
				strSubFolder.Attributes = strSubFolder.Attributes + 1 
72.
				objFilesys.CopyFile strDesktopIniAttn, strSubFolder & "\desktop.ini" 
73.
			end if 
74.
		end if 
75.
		ListFoldersInFolder strSubFolder 
76.
	next 
77.
End Sub
Das Geheimnis des Scripts liegt in der Manipulation der desktop.ini jedes Ordners. Daher brauchen wir auch davon noch drei Vorlagen.

Eine desktop_ok.ini
01.
[.ShellClassInfo] 
02.
IconResource=C:\Windows\system32\SHELL32.dll,45
Eine desktop_warn.ini
01.
[.ShellClassInfo] 
02.
IconResource=C:\Windows\system32\SHELL32.dll,147
Eine desktop_attn.ini
01.
[.ShellClassInfo] 
02.
IconResource=C:\Windows\system32\SHELL32.dll,234
Die drei INIs werden im gleichen Verzeichnis abgelegt wie das Script selbst.

Ausgeführt wird das Script in der Kommandozeile. Wenn eine fortlaufende Ausgabe der gerade abgearbeiteten Verzeichnisse gewünscht wird (Option: EchoOn) startet man das Script sinnvollerweise im CScript-Interpreter mit

01.
cscript c:\pfadzumscript\setfolderwarnicon.vbs 170 200 EchoOn c:\daten\freigabe\
Mit EchoOff geht auch der WScript als Standardinterpreter mit

01.
setfolderwarnicon.vbs 170 200 EchoOff c:\daten\freigabe\
Der erste Parameter (170) steht dabei für die untere Warnschwelle bei deren Überschreiten von "grün" auf "gelb" gewechselt wird. Der zweite Parameter (200) steht für die obere Warnschwelle. Oberhalb dieser Schwelle wird von "gelb" auf "rot" gewechselt. Der dritte Parameter (EchoOn) steht für eine Ausgabe der bearbeiteten Verzeichnisse. und zu guter letzt als vierter Parameter (d:\daten\freigabe\) das Verzeichnis da mitsamt Unterverzeichnissen bearbeitet werden soll.

Viel Spaß damit.
Mitglied: evinben
06.03.2014 um 18:21 Uhr
fleißig gemacht!
Interessant wäre es nun dies als Dienst umzusetzen und laufen zulassen, sodass bei jeder Änderung im Pfad die Pfadlänge sofort geprüft wird.
Eigentlich wäre es für Microsoft kein Problem das Vorhaben im OS standardmäßig einzubauen. Wer weiß, vielleicht liest das einer und schlägt es denen vor.

Gruß
Evinben
Bitte warten ..
Mitglied: manuel-r
06.03.2014 um 18:44 Uhr
Als Behelf tut es halt auch ein geplanter Task den man einmal täglich über die Shares am Fileserver laufen lässt. Je nach Anzahl der Verzeichnisse schafft man evtl auch mehrmals täglich. Geht halt auch ein bißchen auf die Ressourcen...
Bitte warten ..
Mitglied: evinben
06.03.2014, aktualisiert um 20:22 Uhr
es müssen nicht nur freigegebene Ordner sein
Dein Einsatz ist generell für alle Pfade innerhalb von gesamtem Windows OS gut.
Wenn dies standardmäßig integriert wäre, würde es natürlich nur ein Bruchteil der Ressourcen verbrauchen.

Aber dein Script ist nicht nur eine bereits reale Lösung, sondern eine gute Anregung zur Umsetzung innerhalb des OS in Echtzeit - meine persönliche Prophezeiung .

Gruß
Evinben
Bitte warten ..
Mitglied: Penny.Cilin
07.03.2014 um 09:12 Uhr
Mein lieber Scholli, äääh manuel-r,

Da hast Du richtig gute Arbeit reingesteckt. Respekt, kann mich evinben nur anschliessen..

Ich werde es mal auf den Test Fileserver als Scheduled Task einrichten und zweimal am Tage laufen lassen. Mal schauen wie die Ressourcenbelastung ist.


Gruss Penny.
Bitte warten ..
Mitglied: Endoro
09.03.2014 um 14:23 Uhr
Hey,
ich finde nicht, dass das Problem dem user angelastet werden kann.
Der muss so was eigentlich nicht wissen.
Mit Links und Junctions können theoretisch endlose Pfade mit Bordmitteln entstehen.
Gruss, Endoro.
Bitte warten ..
Mitglied: wiesi200
09.03.2014 um 21:05 Uhr
Zitat von evinben:

Aber dein Script ist nicht nur eine bereits reale Lösung, sondern eine gute Anregung zur Umsetzung innerhalb des OS in
Echtzeit - meine persönliche Prophezeiung .

Es ist eine gute Lösung für ein reales Problem.
Innerhalb des OS also von Seiten MS wohl aber ein schlechter Ansatzpunkt. Die sollten sich eher mal Gedanken machen das die Grenzen des Dateisystem auch vernünftig verwenden kann.
Bitte warten ..
Mitglied: kontext
10.03.2014, aktualisiert um 07:25 Uhr
Zitat von wiesi200:
Die sollten sich eher mal Gedanken machen das die Grenzen des Dateisystem auch vernünftig verwenden kann.

Hallo wiesi200,

AFAIK haben dass die Jungs schon aus Redmond gemacht ...
... Stichwort ReFS - das kann ein paar Zeichen mehr als NTFS

manuel-r schön gemacht - thumps up

Gruß
kontext
Bitte warten ..
Mitglied: manuel-r
10.03.2014 um 07:57 Uhr
AFAIK haben dass die Jungs schon aus Redmond gemacht ...
... Stichwort ReFS - das kann ein paar Zeichen mehr als NTFS

Das Problem ist ja nicht die Anzahl der Zeichen die das verwendete Filesystem beherscht. Das Problem ist die Inkosistenz innerhalb des Betriebs-/Dateisystems:
Es ist problemlos möglich auf der 20. Ebene wo die Pfadlänge bspw. schon 240 Zeichen belegt noch Unterverzeichnis 21, 22, 23 und 24 anzulegen und dort dann auch noch Dateien abzulegen, damit man endgültig und ganz sicher über die Begrenzung kommt. Das kann jeder ausprobieren indem man bei Pfadlänge 240 ein ZIP entpackt, das selbst eine längere Verzeichnisstruktur beinhaltet: Das OS packt die gnadenlos aus und legt Verzeichnisse und Dateien an. Problematisch wird es wenn bspw. die Datensicherung vorbei kommt um dort was zur Sicherung abzuholen oder der User aus diesem Ordner nochmal was löschen oder verschieben will. Das wird dann vom OS mit Lesefehler quittiert.
Die einzige Lösung wieder auf die Dateien zuzugreifen liegt dann in einem net use oder subst auf einen Pfad der weit genug in der Hierarchie drin ist.
Wenn das OS es richtig machen wollte, dann würde es beim Anlegen von Verzeichnissen bzw. Dateien die Pfadlänge prüfen und dem User entsprechend Bescheid geben in der Form "Die Länge von Pfad und/oder Dateiname überschreitet die Anzahl der maximal möglichen Zeichen. Bitte wählen Sie einen anderen Namen." Das wäre für den Benutzer handelbar.
Bitte warten ..
Mitglied: Endoro
10.03.2014 um 08:54 Uhr
Zitat von manuel-r:
Die einzige Lösung wieder auf die Dateien zuzugreifen liegt dann in einem net use oder subst auf einen Pfad der weit
genug in der Hierarchie drin ist.
Wie schon gesagt, eine Junction in die Hirarchie genügt. Man benötigt kein neues Volume.
Es geht sogar ganz ohne Volume/Junction, wenn man UNC Notation verwendet.
Gruss, Endoro.
Bitte warten ..
Mitglied: wiesi200
10.03.2014 um 08:57 Uhr
Zitat von kontext:

> Zitat von wiesi200:
> Die sollten sich eher mal Gedanken machen das die Grenzen des Dateisystem auch vernünftig verwenden kann.

Hallo wiesi200,

AFAIK haben dass die Jungs schon aus Redmond gemacht ...
... Stichwort ReFS - das kann ein paar Zeichen mehr als NTFS

Ich könnt mich jetzt echt täuschen, aber wenn man mit NortenCommander drauf zugreift hat man diese Probleme nicht.
Bitte warten ..
Mitglied: kontext
10.03.2014, aktualisiert um 09:06 Uhr
Zitat von wiesi200:
Ich könnt mich jetzt echt täuschen, aber wenn man mit NortenCommander drauf zugreift hat man diese Probleme nicht.

Kann gut möglich sein, denn:
NTFS unterstützt glaub irgendwas um die 32000 Zeichen wenn diese nicht im Unicode vorliegen.
Der Win-Explorer verwendet Unicode und da sind es nur 255 Zeichen.
ReFS kann jetzt 32768 Zeichen in UniCode. Also sollte der Explorer & Co kein Problem damit haben ...

Gruß
Bitte warten ..
Mitglied: evinben
10.03.2014, aktualisiert um 09:23 Uhr
dem manuel-r@ stimme ich völlig zu. Genau diese Probleme treten in der Praxis auf. Es sind zwar noch kleine Probleme, aber sie sind völlig ausreichend, um den gesamten Diskomfort über die Jahre von OS zu OS unbemerkt mitzuschleppen.
Den Anwendern blieb ja nichts anderes übrig, als diese Beschränkung so anzunehmen wie sie ist und weil es eben eine „Kleinigkeit“ ist, dass alleine nur aus diesem Grund kaum einer mehr auf diese Problematik schaut und somit die Akzeptanz geschaffen war.
Das ist so wie mit den quietschenden Türen: es fängt allmählich leise zu quietschen an, alle gewöhnen sich daran, bis es dann jemandem nach Monaten oder sogar Jahren so dermaßen auffällt und er sie alle ordentlich schmiert oder sogar gelagert umkonstruiert. Paradox ist es dann, dass es überraschenderweise dennoch Leute gibt, welche das „Guqietsche“ vermissen und welche die sich sogar wundern, was da nicht in Ordnung wäre und warum etwas geändert werden muss, wenn es funktioniert.

Gruß
Evinben
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
Windows Server 2012 R2 Benutzerkonto für Zugriff auf AD Benutzer (1)

Frage von JulianOhm zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...