blackending
Goto Top

Dateititel Attribut auf Dateiname ändern

Hallo, ich habe ca 5000 Dateien von denen ich das Attribut "Titel" auf den Dateinamen ändern soll. Ich dachte mir das geht sicher mit einer Batchdatei einfacher als per Hand, ich habe jedoch keine Erfahrung mit Batch gemacht bisher. Bin um jede Hilfe/Notlösung dankbar. Achja die Dateien befinden sich in unterschiedlichen Unterordern.

Gruß Jörn

Content-Key: 241684

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

Ausgedruckt am: 29.03.2024 um 00:03 Uhr

Mitglied: colinardo
colinardo 24.06.2014 aktualisiert um 10:29:06 Uhr
Goto Top
Hallo Jörn, Willkommen auf Administrator.de!
Uns fehlen hier noch ein paar Informationen: Meinst du mit "Titel-Attribut" eine HTML-Datei, oder die Dateieigenschaften ??
Grüße Uwe
Mitglied: BlackEnding
BlackEnding 24.06.2014 aktualisiert um 10:36:22 Uhr
Goto Top
Vielen Dank für die Begrüßung face-smile

Die Dateieigenscahften, also: CLCA-Sekretariat.doc->Rechtsklick -> Eigenschaften -> Details -> Beschreibung -> Titel -> CLCA-Sekretariat.
Mitglied: colinardo
colinardo 24.06.2014 um 10:34:37 Uhr
Goto Top
Sind das alles nur *.doc also Word-Dateien ?
Mitglied: BlackEnding
BlackEnding 24.06.2014 um 10:46:22 Uhr
Goto Top
Von denen ich weiß das ich sie anpassen soll sind es *.doc und *.xls. Da sind aber auch andere Typen drinne.

Aber ich denke welche Typen kann man ja auch nachher noch anpassen. Habe gerade meinen Vorgesetzten diesbezüglich angeschrieben welche Typen alles.
Mitglied: BlackEnding
BlackEnding 24.06.2014 aktualisiert um 12:18:09 Uhr
Goto Top
Wie kann man denn überhaupt den Namen einer Datei und die Attribute auslesen?
Mitglied: colinardo
colinardo 24.06.2014 aktualisiert um 12:24:27 Uhr
Goto Top
Zitat von @BlackEnding:

Wie kann man denn überhaupt den Namen einer Datei und die Attribute auslesen?
die erweiterten Dateieigenschaften kannst du z.B. mit dieser Powershell Funktion: Erweiterte Dateieigenschaften mit Powershell-Funktion abfragen abfragen
oder mit DSOFile:
Objecthandle Funktion um Dateidetails zu editieren

bin nur gerade beschäftigt, melde mich dazu nochmal ..

Grüße Uwe
Mitglied: BlackEnding
BlackEnding 24.06.2014 um 12:26:33 Uhr
Goto Top
Das überfordert mich doch schon ein bisschen :S Wollte doch nur ein Attribut anpassen...
Mitglied: colinardo
colinardo 24.06.2014 aktualisiert um 12:28:50 Uhr
Goto Top
Zitat von @BlackEnding:

Das überfordert mich doch schon ein bisschen :S Wollte doch nur ein Attribut anpassen...
das ist aber leider nicht so einfach wie du dir das vorstellst, denn dafür gibt es kein einheitliches Programming-Interface für jeden Dateityp ! Melde mich später nochmal dazu ...
Mitglied: colinardo
colinardo 24.06.2014 aktualisiert um 15:34:58 Uhr
Goto Top
So,
hier mal ein Beispiel wie man es mit Beitrag machen könnte:
(RootOrdner in Zeile 4 und Dateierweiterungen in Zeile 5 angeben)
WICHTIG: Hier können keine beliebigen Dateiendungen angegeben werden. Die DSOFile.dll ist primär für Office-Dateien gedacht! Und nicht vergessen die DLL mit regsvr32 zu registrieren.
#NoTrayIcon
#include <File.au3>
#include <Array.au3>
$folder = "C:\Ordner"  
Global $arrExtensions = [".docx",".xlsx"]  

$odocument = ObjCreate("DSOFile.OleDocumentProperties")  
$allFiles = ListFilesRecurse($folder,$arrExtensions)

SplashTextOn("","Dateien werden bearbeitet ... Bitte warten","350","50","-1","-1",35,"","","")  

for $i = 0 to UBound($allFiles) -1
	$odocument.open($allFiles[$i])
	Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = ""  
	Local $aPathSplit = _PathSplit($allFiles[$i], $sDrive, $sDir, $sFilename, $sExtension)
	$odocument.SummaryProperties.title = $aPathSplit[3]
	$odocument.Save()
	$odocument.Close()
Next
SplashOff()
msgbox(0,"","Fertig",2)  

 Func ListFilesRecurse($sSourceFolder,$filter)
     Local $sFile
	 Local $foundFiles
     ; Force a trailing \
     If StringRight($sSourceFolder, 1) <> "\" Then $sSourceFolder &= "\"  
     ; Create an array to hold the folders to be searched
     Local $aFolderList[10] = [1, $sSourceFolder]
     ; Search within listed folders until all have been searched
     While $aFolderList > 0
         ; Get path of folder to search
         Local $sSearchPath = $aFolderList[$aFolderList[0]]
         ; Remove folder from list
         $aFolderList -= 1
         ; Start the search
         Local $hSearch = FileFindFirstFile($sSearchPath & "*.*")  
         ; If failure then return
         If $hSearch = -1 Then Return
         ; Now run through the contents of the folder
         While 1
             ; Get next match
             $sFile = FileFindNextFile($hSearch)
             ; If no more files then close search handle and return
             If @error Then ExitLoop
             ; If a folder then add to array to be searched
             If @extended Then

                 ; #######################################
                 ; Increase folder count
                 $aFolderList += 1
                 ; Double array size if too small (fewer ReDim needed)
                 If UBound($aFolderList) <= $aFolderList Then ReDim $aFolderList[UBound($aFolderList) * 2]
                 ; Add folder
                 $aFolderList[$aFolderList[0]] = $sSearchPath & $sFile & "\"  
                 ; #######################################
             Else
                 ; If a file ...
				 Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = ""  
				 Local $aPathSplit = _PathSplit($sSearchPath & $sFile, $sDrive, $sDir, $sFilename, $sExtension)

				 if _ArraySearch($filter,$aPathSplit[4]) <> -1 then
					_ArrayAdd($foundFiles, $sSearchPath & $sFile)
				 endif
             EndIf
         WEnd
         ; Close search handle
         FileClose($hSearch)

     WEnd
	Return $foundFiles
 EndFunc
Viel Erfolg
Grüße Uwe
Mitglied: BlackEnding
BlackEnding 24.06.2014 um 14:52:25 Uhr
Goto Top
Hmm wenn ich es ausführe kommt nur die MassageBox mit "Fertig", aber es hat sich nichts geändert. Soll heißen das das Attribut Titel nicht gleich dem Dateinamen ist. Außerdem geht der Prozess ziemlich schnell (1-2 Sekunden). Die dsofile.dll registriere ich doch mit "cmd -> regsvr32 dsofile.dll" oder? Kommt jedefalls die Meldung das sie erfolgreich registriert wurde...
Mitglied: colinardo
colinardo 24.06.2014 aktualisiert um 14:57:06 Uhr
Goto Top
Zitat von @BlackEnding:
Die dsofile.dll registriere ich doch mit "cmd -> regsvr32 dsofile.dll" oder? Kommt jedefalls die Meldung
das sie erfolgreich registriert wurde...
Bitte ins C:\windows\system32 Verzeichnis kopieren, bzw C:\windows\SysWOW64 bei einem 64Bit System und dort registrieren.
Wenn du alles richtig angepasst hast (Dateierweiterungen mit Punkt aber ohne Sternchen!) dann läuft das, hier erfolgreich getestet.
Mitglied: BlackEnding
BlackEnding 24.06.2014 um 15:23:42 Uhr
Goto Top
Ist 32bit. Datei in Sys32 (btw die ist 89,4kB groß - das ist richtig oder?) verschoben, dann mit regsvr32 dsofile.dll registriert. Meldung DllRegisterServer in dsofile.dll erfolgreich durchgeführt. Autoit gestartet dein Script reinkopiert Pfad auf $folder = "D:\BEQS_NOR" und Endungen auf Global $arrExtensions = [".doc",".xls"] angepasst. Build geklickt - exe in D:\BEQS_NOR verschoben. Gestartet, Sekunde gewartet "Fertig". Keine Änderungen.
Mitglied: colinardo
colinardo 24.06.2014, aktualisiert am 25.06.2014 um 10:02:58 Uhr
Goto Top
kann ich hier nicht nachstellen, sorry hier läufts auf einem Win7 x32 als auch x64. Schon mal neu gestartet ?
Gab in der Vergangenheit schon mal Systeme auf der die DLL nicht wie erwartet funktioniert, konnte bisher aber nicht herausfinden weswegen.
Mitglied: BlackEnding
BlackEnding 24.06.2014 um 15:59:00 Uhr
Goto Top
Neustart half leider auch nicht. Dann habe ich wohl Pech. Aber jetzt erstmal Feierabend und morgen Berufsschule. Dann nach einer anderen Lösungsmöglichkeit umsehen und wenn alle Stricke reißen = Per Hand O.O

Gruß