edi.pfisterer
Goto Top

Datenträger nach Filmen, MP3s, Bildern oder docx durchsuchen - Auflistung inkl. Filmlänge, Abmessungen, Interpret, Kamermodell, Autor etc.. in eine .csv speichern

Um etwas Ordnung in die "Sicherungskopien" zu bringen, könnte folgender Codeschnipsel behiflich sein...

Aloha!
Nachdem sich doch mittlerweile etwas Chaos in meiner Filmsammlung breit gemacht hat und ich keine passende UND veränderbare Software gefunden habe, ist folgendes Tool entstanden...

Die Idee:
Mittels HTA als GUI und VBS ein Tool basteln, das einen beliebigen Datenträger nach einem bestimmten Datentyp (auf Grundlage der Standardanwendung, mit der der Dateityp geöffnet wird) durchsucht, einige erweiterte Dateieigenschaften sammelt und diese dann in eine csv schreiben

Die Umsetzung:
[edit: das Skript könnte auf einigen Vista oder 7 nicht laufen. Gegebenfalls wäre also die mstha.exe in Windows32 gegen eine ältere Version (am besten aus XP) tauschen...]

folgenden Code als myMovies.hta speichern (an beliebiger Stelle) - Start durch Doppelklick

<head>
<meta name="author" content="urobe73_administrator.de">  
<meta name="generator" content="Ulli Meybohms HTML EDITOR">  
<title>Edis Dateiliste</title>
<HTA:APPLICATION
SCROLL="yes"  
SINGLEINSTANCE="yes"  
WINDOWSTATE="normal"  
>
</head>
<script language="VBScript">  
' Version 02_04_2010 - 12:00  

Set objFSO = CreateObject("Scripting.FileSystemObject")  
kopfzeile = 0
function meineVids(pfad,dateiname)

        if kopfzeile = 0 then
        set logbuch1 =objFSO.opentextfile(dateiname, 2, true,0)
        logbuch1.write "Ordnername;Filmtitel;Filmlänge;Abmessungen"  
        logbuch1.close
        kopfzeile = 1
        end if

            If radiobutton(0).Checked Then
                showall = "ja"  
            End If
            If radiobutton(1).Checked Then
                showall = "nein"  
            End If

        Set objFolder = objFSO.GetFolder(pfad)
        Set colSubfolders = objFolder.Subfolders

        For Each objSubfolder in colSubfolders
        on Error resume next
                 ordnerzeichen = ordner_zeichen.value
                 vollername = objFSO.GetAbsolutePathName(objSubfolder)

                 if showAll = "ja" then  
                    ausgabe2 = left(vollername,ordnerzeichen) & punktaln(vollername,ordnerzeichen) & vbcrlf
                 end if
                 ausgabe1 = ausgabe2 & detail(vollername, showall)

                set logbuch1 =objFSO.opentextfile(dateiname, 8, true,0)  ' 8 zum anfügen  
                logbuch1.write ausgabe1
                logbuch1.close
                dateinameneu = dateiname
         call meineVids(vollername,dateinameneu)
        Next

end function

function punktaln(ordnername, anzeigezeichen)
        anzeigezeichen = anzeigezeichen+1   'damit er checkt, dass anzeigezeichen eine zahl ist...  
        if len(ordnername) >=  anzeigezeichen then
        anzeige = "... "  
        end if
        punktaln = anzeige
end function

function Detail(ordnername, lang)
        dateitypen = split(Dateityp.value,";")  

        showAll = lang
            If urlbutton(0).Checked Then
                link = "ein"  
            End If
            If urlbutton(1).Checked Then
                link = "aus"  
            End If
        durchlauf = 1

        Dim arrHeaders(34)
        Set objShell = CreateObject("Shell.Application")  
        Set objFolder = objShell.Namespace(ordnername)
        For i = 0 to 33
            arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
        Next
        For Each strFileName in objFolder.Items
                ordnerzeichen = ordner_zeichen.value
                dateizeichen = datei_zeichen.value

            for i = 0 to UBound(dateitypen)
                if instr(1, objFolder.GetDetailsOf(strFileName, 2), dateitypen(i), 1) >= 1 then
                nemmas = 1
                end if
            next

             if nemmas = 1 then
                if durchlauf = 1 AND showAll <> "ja" then  
                        feedback = feedback & vbcrlf & left(ordnername,ordnerzeichen) & punktaln(ordnername,ordnerzeichen) & vbcrlf
                        feedback_DVD = feedback
                        durchlauf = 2
                end if
                feedback = feedback & " ;" & left(objFolder.GetDetailsOf(strFileName, 0),dateizeichen) _  
                    & punktaln(objFolder.GetDetailsOf(strFileName, 0),dateizeichen) & "; " & objFolder.GetDetailsOf(strFileName, 21) _  
                    & ";(" & objFolder.GetDetailsOf(strFileName, 26) & ");"  

                    if link = "ein" then  
                    feedback2 = Chr(34) & "=hyperlink(" & Chr(34)  & Chr(34)& ordnername & "\" & objFolder.GetDetailsOf(strFileName, 0) _  
                    & Chr(34)  & Chr(34) & ";"  & Chr(34)  & Chr(34) & "klick " &  Chr(34)  & Chr(34)& ")"  & Chr(34)  
                    end if

                    feedback = feedback & feedback2 & vbcrlf
                     if instr(1, objFolder.GetDetailsOf(strFileName, 0),"vob", 1)>=1 then feedback = feedback_DVD & "ist eine DVD" & vbcrlf  
            end if
            nemmas = 0
        Next
        Detail = feedback
end function

Sub Aufgabe1

        woissndes = pfad.value
        dateiname = replace(woissndes,"\","_")  
        dateiname = replace(dateiname,":","_")  
        dateiname = dateiname & "_" & dateityp.value & ".csv"  

        call meineVids(woissndes,dateiname)

        DataArea.InnerHTML = "<a href='" & dateiname & "'>Datei</a>  erfolgreich angelegt"  

End Sub

</script>


<body bgcolor=#FAF8AF>
<font face=verdana>
Pfad: <input type="Text" name="pfad" value="G:\" size="" maxlength=""><br><br>  


Was erscheint als Typ, wenn man den Mauszeiger über eine gesuchte Datei bewegt: <input type="Text" name="Dateityp" value="vlc;windows media" size="25" maxlength="20"> <br>  
<font size = 1>
(es können auch mehrere Typen, durch <b>;</b> getrennt, angegeben werden!)<br>
Beispiele: Irfan;Windows Media;excel;word;winamp ... oder mit der Dateierweiterung (einzeln oder kombiniert): doc;zip;rar;xlsx;mp3;avi</font><br><br>


Die Anzeige der Ordner wird auf <input type="Text" name="ordner_zeichen" value="120" size="" maxlength=""> eingeschränkt!<br><br>  

Die Anzeige der Dateinamen wird auf <input type="Text" name="datei_zeichen" value="100" size="" maxlength=""> eingeschränkt!<br><br>  

Sollen auch Ordner angezeigt werden, die den gewünschten Dateityp NICHT enthalten?
Ja <input type="radio" name="radiobutton" value="0"> Nein <input type="radio" name="radiobutton" value="1" checked><br><br>  
Sollen in der .csv-Datei Links zu den Dateien erscheinen?
Ja <input type="radio" name="urlbutton" value="0"> Nein <input type="radio" name="urlbutton" value="1" checked><br><br>  
<br>


<input type="button" value="Datei anlegen" name="run_button" onClick="Aufgabe1"><br>  
<font size = 1>(Die Verarbeitung kann mehrere Minuten dauern... Bitte um etwas Geduld)</font>

<br><br><br>
<b>
<div id="dataarea"></div>  
</b>
</font>
</body>

Kurze Erklärung zur Verwendung bzw. Anpassung:

Durch klick auf den Button Datei anlegen wird das Laufwerk (bzw. der jeweilige Unterordner, den ihr gewählt habt) durchsucht und im Hintergrund die .csv-Datei angelegt;
Das Tool schließt den Such/Schreibvorgang mit der Meldung "Datei erfolgreich angelegt" ab. Dies kann - je nach Größe des Datenträgers bzw. Saft eures Systems mehrere Minuten in Anspruch nehmen...

Die csv-Datei wird in das Verzeichnis gespeichert, in dem die myMovies.hta liegt. Der Dateiname richtet sich nach folgendem Schema:

LW_Unterverzeichnis_dateityp1;dateityp2.csv


Das Tool lässt sich für jeden beliebigen Dateityp verwenden, in dem man im Windows Explorer den Mauszeiger über eine Datei des gewünschten Dateityps positioniert. Im Popup findet sich in der ersten Zeile der Eintrag TYP.
(Tipp: es genügt, im Eingabefeld Dateityp einige Zeichen des Typs einzutragen!)

Weiters besteht die Möglichkeit, mehrere Dateitypen in einer .csv zu erfassen, in dem man diese durch Semikolon (;) trennt
(Tipp: ohne Leerzeichen)

Zum Zwecke der besseren Übersichtlichkeit besteht die Möglichkeit, lange Ordnernamen bzw. Dateinamen auf eine selbst wählbare Zeichenanzahl abzukürzen (dies wird durch ... in der csv dargestellt)

Außerdem kann die Auflistung erweitert werden, in dem alle Ordner angezeigt werden (dh, auch jene, in denen der gesuchte Datentyp nicht vorhanden ist)

Die grafische Gestaltung des Tools lässt etwas zu wünschen übrig, aber meine ästhetischen Anforderungen sind nur in Bezug auf das andere Geschlecht erhöht...
(Tipp: die GUI ist rein in HTML verfasst und lässt sich beliebig verbessern... - verschlechtern ist wohl kaum mehr möglich face-wink

Falls andere als die von mir gewählten erweiterten Eigenschaften in die csv übertragen werden sollten, dann könnte folgende Liste behilflich sein.

Tipp, falls ihr mit VBS nicht so ganz per Du seid:
die Zahlen entsprechen dem Arrayindex in der Funktion Detail entsprechen...: (folgende Änderungen beziehen sich auf Zeile 97 im Code)
Beispiel 1: ihr ersetzt die Abmessung gegen das Kamermodell [24]
Beispiel 2: ihr erweitert den Code - hier wird der Interpret und den Titel des Albums ausgegeben - wenn es um mp3 gehen sollte...): [16] [17]
Beispiel1:
& ";(" & objFolder.GetDetailsOf(strFileName, 24) & ");"   

Beispiel2:
 & ";(" & objFolder.GetDetailsOf(strFileName, 16) & ")" &   ";" & objFolder.GetDetailsOf(strFileName, 17) &  ";"  

(ich verwende nur die Indexwerte 0,21 u 26)

0 Name: meinLieblingsfilm.avi
1 Größe: 91.000 KB
2 Typ: VLC media file (.avi)
3 Geändert am: 12.09.2009 19:39
4 Erstellt am: 12.09.2009 19:37
5 Letzter Zugriff am: 01.04.2010 21:18
6 Attribute: A
7 Status: Online
8 Besitzer: EDI\urobe
9 Autor:
10 Titel:
11 Thema:
12 Kategorie:
13 Seiten:
14 Kommentare:
15 Copyright:
16 Interpret:
17 Albumtitel:
18 Jahr:
19 Titelnummer:
20 Genre:
21 Dauer: 00:09:36
22 Bitrate:
23 Geschützt:
24 Kameramodell:
25 Bild aufgenommen am:
26 Abmessungen: 640 x 480
27 : 640 Pixel
28 : 480 Pixel
29 Folgenname:
30 Sendungsbeschreibung:
31 :
32 Abtastgröße:
33 Abtastrate:

Evtl. braucht ja jemand von Euch einmal dieses Tool oder kann darauf aufbauend etwas für seine mp3-Sammlung basteln (oder .docx oder whatever...).
(Außerdem kann ich es durch diese Anleitung selbst nicht mehr verlieren.... wäre leider nicht das erste Tool, das ich wiederholt mache, da ich es nicht mehr finde face-wink
Bei Fragen helfe ich gerne weiter...

lg
Edi

Content-ID: 139742

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

Ausgedruckt am: 24.11.2024 um 22:11 Uhr

bastla
bastla 02.04.2010, aktualisiert am 18.10.2012 um 18:41:35 Uhr
Goto Top
Hallo Edi!

Da warst Du ja schon wieder fleißig ... face-smile

Nur als Anmerkung vorweg (getestet habe ich noch nicht): Wie hier schon mal von Biber zusammengestellt, gibt es offensichtlich je nach Windows-Version unterschiedliche Indizes für die "Extended File Attributes" ...

Grüße
bastla
Edi.Pfisterer
Edi.Pfisterer 02.04.2010 um 20:27:00 Uhr
Goto Top
Hallo Bastla!
Danke für den Hinweis!!!
Da ich hier noch auf XP unterwegs bin, funktioniert mein Code - ohne entsprechende Anpassungen der Indizes - auch nur dafür...

Du bist natürlich wieder herzlich eingeladen, das Ding zu verändern bzw. -bessern!!!!

btw: mir ist aufgefallen, dass das Tool manche Ordner auslässt, weil ihm irgendetwas an der Formatierung der Dateien nicht passt...
(Konnte dies anhand einer Datei, die ein russischer Kollege in seiner Heimatschrift benannte, feststellen...
Falls Du dafür eine Verbesserung hast (dh, es wird nur die Datei, nicht aber der ganze Folder ausgelassen), würde ich das schön finden.

Am schärfsten wäre natürlich eine Prüfung vorweg, welches OS installiert ist und anschliessend daran ein paar checkboxen, welche Infos in die csv geschrieben werden sollen....

Wünsche Dir frohes Osternestsuchen face-wink
lg
Edi
Midivirus
Midivirus 08.04.2010 um 23:28:36 Uhr
Goto Top
top!

Teste das jetzt einfach mal und bei Fehler, gibs Meldungen....
Edi.Pfisterer
Edi.Pfisterer 09.04.2010 um 09:47:54 Uhr
Goto Top
Hallo Midivirus!
Wie verlief Dein Test? Verbesserungsvorschläge? Anmerkungen?
lg