max2309
Goto Top

Leere Ordner mit Desktop.ini-Datei kennzeichnen

Hallo zusammen,

ich brauche bitte eure Hilfe.
Mein Wunsch wäre es bei einer bestehenden Ordnerstruktur die jeweils leeren Ordner bzw. Ordner, welche auch nur Unterordner ohne Dateien enthalten optisch zu kennzeichnen, zB indem das Ordner-Icon bei leeren Ordnern auf ein weißes Blatt geändert wird. Sobald in den Ordner eine Datei gespeichert wird sollte sich das Icon wieder auf die gelbe Mappe ändern. Die Lösung, die mir nach einiger Suche am Besten gefallen hat, wäre, dies über die Desktop.ini-Datei zu steuern.

Ich habe im Forum auch schon Codebeispiele gefunden. Allerdings funktioniert das bei mir nicht.

Zur Info - ein Beispiel des Aufbaus der Ordnerstruktur

Gespeichert auf Laufwerk C:
Projekte
-23001_Kunde_Titel
--bereitgestellte Daten
--Modelle
--Dokumentation
-23001_Kunde_Titel
--bereitgestellte Daten
--Modelle
--Dokumentation

Die Datei Desktop.ini ist im Ordner "Projekte" gespeichert und enthält folgenden Code
for / "delims=" %%i in ('dir /ad /b /s "C:\Projekte"') do if "%%~zi"=="0" (  

[.ShellClassInfo]>> "%%~i\Desktop.ini"  
IconFile=^%SystemRoot^%\system32\SHELL32.dll >> "%%~i\Desktop.ini"  
IconIndex=131 >> "%%~i\Desktop.ini"  

)

Meine Programmierkenntnisse beschränken sich eigentlich auf VBA mittels learning by doing - also bitte um Nachsicht für dumme Fragen.

Vielen Dank für eure Hilfe und liebe Grüße

Content-Key: 21735441263

Url: https://administrator.de/contentid/21735441263

Printed on: May 2, 2024 at 03:05 o'clock

Member: Pjordorf
Pjordorf Apr 19, 2024 at 10:25:26 (UTC)
Goto Top
Hallo,

Zitat von @Max2309:
Allerdings funktioniert das bei mir nicht.
Dann machst du was falsch.

Die Datei Desktop.ini ist im Ordner "Projekte" gespeichert und enthält folgenden Code
Und nun sollen wir die Bild Zeitung nehmen und die Wöchentliche Fehlermeldung raussuchen?

Gruss,
Peter
Member: Max2309
Max2309 Apr 19, 2024 at 10:49:07 (UTC)
Goto Top
Hallo,
danke - das weiß ich selbst, dass ich was falsch mache, sonst würde ich hier nicht schreiben.

Es gibt keine Fehlermeldung, sonst hätte ich sie natürlich in den Beitrag geschrieben.
Erfasse ich nur die Änderung des Ordner-Icons zB mit

[.ShellClassInfo]
IconResource=C:\WINDOWS\System32\SHELL32.dll,0

funktioniert es wunderbar, dass sich das Icon ändert. Ich möchte aber allerdings die Änderung des Icons vom Ordnerinhalt abhängig machen.

Bei dem Code, den ich anwende laut Beitrag passiert einfach nichts.


lg
Member: Hubert.N
Hubert.N Apr 19, 2024 at 10:56:40 (UTC)
Goto Top
Moin

wo hast Du denn die Deinem Post zugrundeliegende Info gefunden?

Mir ist es neu, dass man in der desktop.ini auch Programmcode unterbringen kann. Das ist m.E. lediglich ein Textfile, welcher ausgewertet wird.

Gruß
Member: Kraemer
Kraemer Apr 19, 2024 at 12:37:28 (UTC)
Goto Top
Moin,

das was du da beschreibst ist doch das Standardverhalten von Windows, wenn man die Ansicht auf mindestens "mittelgroße Symbole" umstellt.

Gruß
Member: Max2309
Max2309 Apr 19, 2024 at 12:44:15 (UTC)
Goto Top
Ja ich weiß, dass man mit der Umstellung der Ansicht einen ähnlichen Effekt hat. Da aber mehrere Personen auf die Ordnerstruktur zugreifen, weiss ich natürlich nicht, ob alle immer die richtige Ansicht eingestellt haben.

Da würde es mir besser gefallen, wenn bei jeder Ansicht die leeren Ordner gekennzeichnet wären.

Aber danke face-smile
lg
Member: Max2309
Max2309 Apr 19, 2024 at 13:34:33 (UTC)
Goto Top
Member: Hubert.N
Hubert.N Apr 19, 2024 updated at 14:48:41 (UTC)
Goto Top
... ja.. habe ich es mir doch gedacht... face-big-smile

Im Original ist das eine Batchdatei, die
in Zeile 1 die Ordner prüft
in Zeile 2 die Desktop.ini neu erstellt (weil ein ">")
in Zeile 3 und 4 weitere Informationen an die Datei anhängt. (weil zwei ">")

Original:
for / "delims=" %%i in ('dir /ad /b /s "C:\ZielPfad"') do if "%%~zi"=="0" (    
echo [.ShellClassInfo] > "%%~i\Desktop.ini"  
echo IconFile=^%SystemRoot^%\system32\SHELL32.dll >> "%%~i\Desktop.ini"  
echo IconIndex=131 >> "%%~i\Desktop.ini"  
)

Deine "Fälschung":
for / "delims=" %%i in ('dir /ad /b /s "C:\Projekte"') do if "%%~zi"=="0" (  
[.ShellClassInfo]>> "%%~i\Desktop.ini"  
IconFile=^%SystemRoot^%\system32\SHELL32.dll >> "%%~i\Desktop.ini"  
IconIndex=131 >> "%%~i\Desktop.ini"  

Wenn man irgendwo im Internet Codebeispiele findet, sie nicht versteht und dann auch noch verändert, ist es nicht verwunderlich, dass das Ergebnis anders ist, als erwartet
In diesem Fall nicht gefährlich - in anderen Fällen höchst riskant, weil man eben nicht weiß, was das Script nun wirklich auf dem Rechner so alles anstellt.

Gruß und Schönes WE face-smile
Member: Hubert.N
Hubert.N Apr 19, 2024 at 14:58:11 (UTC)
Goto Top
... ach ja... was ich vergaß...

es fehlt sicher noch das ELSE. Ich wüsste nich, was Windows selbsständig dazu animeren sollte, die Ordnersymbole wieder auf alten Stand zu bringen, wenn da Daten in den vorher leeren Ordner gespeichert werden.

Also
IF <Bedingung> (
   mache irgendwas
   und noch etwas
) ELSE (
   mache was anderes
   und noch was anderes
)
Member: Max2309
Max2309 Apr 20, 2024 at 05:58:50 (UTC)
Goto Top
Hallo Hubert.N vielen Dank. Das war jetzt hilfreich face-smile
Die Erstellung der Destop.ini mithilfe einer Batchdatei klappt wunderbar. Die Änderung des Ordner-Icons auch. Allerdings nur, wenn ich den Pfad des Ordners genau erfasse. Anhand der Prüfung, ob der Ordner leer ist, klappts nicht.

Ja das mit dem ELSE ist eigentlich logisch ....

Eine Frage ist noch aufgetaucht. Kann die Batchdatei automatisch gestartet werden. zB beim Öffnen des Explorers?
lg
Max2309
Member: Pjordorf
Pjordorf Apr 20, 2024 updated at 09:56:02 (UTC)
Goto Top
Hallo,

Zitat von @Max2309:
Die Erstellung der Destop.ini mithilfe einer Batchdatei klappt wunderbar. Die Änderung des Ordner-Icons auch. Allerdings nur, wenn ich den Pfad des Ordners genau erfasse. Anhand der Prüfung, ob der Ordner leer ist, klappts nicht.
Zeigt doch mal deinen genauen Code bzw. die desktop.ini. Rechte passen?

Ja das mit dem ELSE ist eigentlich logisch ....
Nicht zwingend, muss auch ohne else funktionieren. Und da dein Ordner nur Leer oder nicht Leer sein kann, gibt es kein Drittes Ergebniss was eine Else benötigt oder rechtfertigt.

Eine Frage ist noch aufgetaucht. Kann die Batchdatei automatisch gestartet werden. zB beim Öffnen des Explorers?
Die frage ist doch eher wann wird die desktop.ini abgearbeitet bzw. gelesen? Soweit ich weiss beim starten des Explorers in einen Ordner mit einer desktop.ini, beim wechseln von einen Ordner zu amderen und es ist eine desktop.ini vorhanden, und sonst nach einer gewissen Zeit wenn kein wechsel des Ordners erfolgt. Welche Zeit ist wohl ein Betriebsgeheimniss von MS. Ob ein Cache genutzt wird ist ebenso ein MS Geheimniss. Auch konnte ich nirgends einen hinweiss darauf finden das eine desktop.ini eine Batchdatei enthalten kann oder das diese abgearbeitet wird. Nur weil man das in einer textdatei (desktop.ini) eintragen kann bedeutet es nicht das es auch vom OS angewendet wird. Werkzeuge wie Process Monitor und Process Explorer sind deine Freunde. Ansonsten sind evtl Geplante Aufgaben (Task planer) deine freunde.
https://learn.microsoft.com/de-de/windows/win32/shell/how-to-customize-f ...
https://learn.microsoft.com/de-de/windows/win32/shell/how-to-implement-c ...
Und du solltest deine geänderte(n) desktop.ini gut weglegen, denn dein OS kann diese auch ganz schnell erneuern bzw. ersetzen.
https://superuser.com/questions/882442/self-created-desktop-ini-does-not ...

Gruss,
Peter
Member: Max2309
Solution Max2309 Apr 21, 2024 updated at 07:06:42 (UTC)
Goto Top
Hallo zusammen,

vielen Dank für eure Hilfe und Tipps

nach ein paar Versuchen läuft jetzt alles
zur Info noch der endgültige Code
@echo off

set "folderPath=C:\Ordner"  

for /F "delims=" %%i in ('dir /ad /b /s "%folderPath%"') do (  
    dir /b /a-d "%%i" >nul 2>&1 && (  
       
        if exist "%%i\desktop.ini" (  
            del "%%i\desktop.ini" >nul 2>&1  
        )
    ) || (
       
        echo [.ShellClassInfo] > "%%i\desktop.ini"  
        echo IconResource=%SystemRoot%\system32\SHELL32.dll,52 >> "%%i\desktop.ini"  
    )
)

Für die automatische Ausführung finde ich die Lösung über die Aufgabenplanung am Besten.

Danke nochmal und
lg