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 3) - Jetzt verbinden

06.03.2014, aktualisiert 12:35 Uhr, 11408 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 ..
Ähnliche Inhalte
Exchange Server
SBS 2011 - Outlook Web App - Kritischer Fehler im Script (4)

Frage von Antshit zum Thema Exchange Server ...

Viren und Trojaner
Erneut kritische Lücke in Windows Defender Co (1)

Link von sabines zum Thema Viren und Trojaner ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (57)

Frage von pjrtvly zum Thema Internet ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (23)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

DSL, VDSL
VDSL Signal via PowerLine an Fritzbox - Möglich? (19)

Frage von Seichobob zum Thema DSL, VDSL ...