Batch Leeren Ordnern im Windows-Explorer ein anderes Icon zuordnen

stefan Willms

Newbie
Registriert
Dez. 2013
Beiträge
3
Hallo zusammen,

ich habe ein kleines Problem bei dem ich nicht weiter komme und ich hoffe dass Ihr mir weiterhelfen könnt.

Ich arbeite in einem Ingenieurbüro in dem immer viele verschiedene Personen an verschiedenen Firmenstandorten an gemeinsamen Projekten arbeiten. Daher ist es ziemlich wichtig, dass die Daten der Projekte von allen Beteiligen so abgelegt werden dass sie auch von allen Anderen schnell gefunden werden können. Hierzu wurde eine einheitliche Ordnerstruktur für alle Projekte mit je 2 bis 3 Ebenen von Unterordnern entwickelt, die beim Start eines neuen Projektes immer neu angelegt werden. Das System funktioniert sehr gut, es gibt nur ein Problem:

Da bei Projektstart die komplette Ordnerstruktur angelegt wird, sind zu Beginn ALLE der über 100 Unterordner leer und weil man nicht weiß, ob schon jemand anderes Daten zum Projekt abgelegt hat, muss man im Explorer mühsam alle Ordner durchklicken und suchen ob dort schon Daten hinterlegt sind.

Meine Idee war jetzt, ein Skript einzusetzen, dass durch die Ordnerstruktur läuft, und bei allen leeren Ordnern und Ordnern die nur leere Unterordner enthalten, das Icon verändern. Natürlich soll das Skript diese Änderung auch umgekehrt machen. Also Ordner, die als leer markiert sind, in denen aber Daten neu abgelegt wurden, sollen wieder das normale Ordner-Symbol erhalten. Dieses Skript könnte dann als „geplanter Task“ mehrmals am Tag durch die Projekte laufen.
Leere Ordner einfach zu löschen kommt als Alternative übrigens nicht in Frage.

Unsere Firma nutzt übrigens nach wie vor Windows XP.


Mein Ansatz:
Wenn man das Ordner-Symbol über „Eigenschaften“ –> „Anpassen“ –> „anderes Symbol“ ändert, wird im jeweiligen Ordner eine versteckte Systemdatei Desktop.ini mit dem Inhalt

[.ShellClassInfo]
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=131

angelegt. Der Index (hier 131) kennzeichnet das gewählte Icon aus der SHELL32.dll
Diese Desktop.ini müsste also dann entsprechend vom Skript angelegt oder angepasst werden.

Leider reichen meine Programmierkenntnisse nicht aus, um ein Skript zu schreiben, das rekursiv durch die Ordner läuft, so dass auch Ordner markiert werden, die nur leere Unterordner enthalten.

Hat jemand einen Vorschlag oder eine Idee? Ich wäre sehr dankbar.

Liebe Grüße,
Stefan
 
Das Problem kannst Du einfacher lösen: Wenn Ihr für die Ordnerdarstellung die Option "Ansicht" auswählt, dann zeigt der Explorer doch in den Icons bereits durch ein in Deinem Sinne ja geändertes Icon an, ob sich in einem Ordner etwas befindet oder nicht.
 
Mühe?

Code:
@echo off
echo [.ShellClassInfo] > "Desktop.ini"
echo IconFile=%SystemRoot%\system32\SHELL32.dll >> "Desktop.ini"
echo IconIndex=131 >> "Desktop.ini"

Sollte irgendwas fehlen was an die .ini übergeben wird, bei dem Zeichen ab wo es fehlt, ein ^ vorsetzen.

/edit
Achso, nur leere Ordner...
Ich würde wohl den DIR Befehl in eine for-schleife packen und pro gefunden Inhalt eine Conunter variable hochzählen lassen. Sobald Counter>1, Pfad variable setzen und Funktionen fürs .ini erstellen aufrufen.
Leider momentan keine Zeit das zu 100% funktionierend zu übersetzen.
 
Zuletzt bearbeitet:
frainer glaubst du nicht dass die entwickelte Lösung zum nächsten OS mitgenommen werden kann?

Ich denke die Abkündigung von XP spielt hier keine Rolle.
 
Ich hab hier ein Script in VBScript für dich, welches leere Ordner findet (so wie du es beschrieben hast).

Wenn du mit VBScript noch nicht so vertraut bist, hier ein paar gute Seiten:
http://www.instructables.com/id/VBS-Tutorial-Basics/
http://msdn.microsoft.com/en-us/library/t0aew7h6(v=vs.84).aspx

In dem Script musst du nur noch festlegen, was passieren soll, wenn ein leerer Unterordner gefunden wurde. (zur Zeit wird einfach eine Meldung angezeigt)

Das Script:
HTML:
' Hier Ordner anpassen
Const projectFolder = "D:\Folder"

' Der eigentliche Programmcode
Dim objFSO, objFolder
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(projectFolder) Then
  Set objFolder = objFSO.GetFolder(projectFolder)
  For Each folder in objFolder.SubFolders
    If IsEmptyFolder(folder) Then
      ' Hier Aktion anpassen
      MsgBox "Leeren Ordner gefunden: " & folder
    End If
  Next
End If
' Prüft, ob ein Ordner nur aus leeren Unterordnern besteht.
Function IsEmptyFolder(folderPath)
  Dim objFSO, objFolder
  Set objFSO = CreateObject("Scripting.FileSystemObject")

  If objFSO.FolderExists(folderPath) Then
    Set objFolder = objFSO.GetFolder(folderPath)
    If objFolder.Files.Count <> 0 Then
      IsEmptyFolder = false
    ElseIf objFolder.SubFolders.Count = 0 Then
      IsEmptyFolder = true
    Else
      For Each subFolder in objFolder.SubFolders
        If Not IsEmptyFolder(subFolder) Then
          IsEmptyFolder = false
          Exit Function
        End If
      Next
      IsEmptyFolder = true
    End If
  Else
    MsgBox "Der Ordner """ & folderPath & """ existiert nicht!"
  End If
End Function
 
Wow Leute,

mit so viel Resonanz in so kurzer Zeit hatte ich garnicht gerechnet. Vielen Vielen Dank.

@Sneedlewoodz: dein Ansatz klingt sehr vielversprechend. Ich werde mal versuchen das Umzusetzen. Bisher bin ich aber immer an der Schleife gescheitert....

@Lunke: mit VBScript bin ich tatsächlich nicht sonderlich vertraut. Aber ich werde mir das Script trotzdem auf jeden Fall anschauen. Es kann ja nie schaden sich mit neuen Dingen zu beschäftigen....

LG
Stefan
 
Hey,

wenn Ordner mit 0 Byte Dateien auch als leer angesehen werden sollen, könnte eine Schleife etwa so aussehen...


Code:
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"

)

Habe das jetzt nicht ausprobiert, aber 'dir /ad /b /s' listet alle Ordner im Pfad. %%~zi gibt die einzelnen Größen zurück, und falls Ordnergröße=0 wird dort die Desktop.ini erstellt. Sollte also theoretisch funktionieren. Aber bitte nicht in Produktivumgebung drauflos testen. :D
 
@Sneedlewoodz

Nee, keine Sorge. Testen werd ich das schon in einer Kopie von einem Projektordner. Danke für die Schleife. Ich werds mal testen wenn mein Chef mich nicht wieder mit Arbeit überhäuft.
 
Zuletzt bearbeitet:
Zurück
Oben