syntax error 10 Geschrieben 31. März 2008 Melden Teilen Geschrieben 31. März 2008 Hallo ! Vorweg: Ja ich weiß dass es dafür fertige Tools gibt, ich möchte es trotzdem so lösen, einfach nur um herauszufinden wie es geht. Also ich möchte alle Dateien im Script Verzeichnis (Script wird einfach in das zu bearbeitende Verzeichnis von Hand kopiert) umbenennen und dafür den Datumsstempel verwenden. z.B. xxxxx.jpg in YYYY-MM-DD_HH.MM.SS.jpg . Nachdem ich mir eine funktionierende Batch Datei gebastelt habe und ich feststellen musste dass das per Batch SO nicht lösbar ist darf ich von vorne anfangen, habe aber von VBS nicht wirklich Ahnung. Das Problem unter Batch besteht darin dass "%~t1" mir nur die Minuten aber keine Sekunden ausgibt (Sekundengenau wäre wichtig weil es in der gleichen Minute durchaus mehrere Dateien geben kann). Anscheinend geht das wohl nicht mit Batch sekundengenau. Mit VBS würde das vermutlich sekundengenau gehen, evtl kann mir da jemand zumindest ein paar hilfreiche Brocken Code hinwerfen, ideal wäre natürlich ein fertiges Script :). Probleme: Auslesen des Datumsstempels (Erstelldatum) und umbauen in das zum sortieren sinnvollere US-Format (YYYY-MM-DD statt DD-MM-YYYY) und das Ergebnis als Dateiname verwenden. Evtl vorhandene doppelte Dateien nicht überschreiben. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 31. März 2008 Melden Teilen Geschrieben 31. März 2008 Hier mal'n Codeschnippsel... Set folder = fso.GetFolder("C:\Scripte\") for each file in folder.Files varFileName= year(file.datelastmodified) & "-" & month(file.datelastmodified) & "-" & day(file.datelastmodified) & " " varFileName = varFileName & hour(file.datelastmodified) & ":" & minute(file.datelastmodified) & ":" & Second(file.datelastmodified) ... ... noch'n bissle If Exist... then varFileName=varFileName & "-01" o.ä. etc. ;) Zitieren Link zu diesem Kommentar
syntax error 10 Geschrieben 31. März 2008 Autor Melden Teilen Geschrieben 31. März 2008 Danke erstmal Cybquest, sieht schonmal gut aus. Hab die Doppelpunkte im Dateinamen durch Punkte ersetzt, so wird das sonst nix (Sonderzeichen=böse). Für die fertige Funktion fehlt aber noch was oder ? So passiert ja erstmal garnichts. Und ich nehme an dass da noch ein Set fso = CreateObject("Scripting.FileSystemObject") rein muss... (Um das Das "If Exist" Doppelte Datei Ding kümmere ich mich später im Feintuning) Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 31. März 2008 Melden Teilen Geschrieben 31. März 2008 Nu ja, wie gesagt ein Codeschnippsel ;) Originalzitat von Dir: "...ein paar hilfreiche Brocken Code hinwerfen..." Umbenennen einer Datei z.B. mit file.Rename(varPath & varFileName) ...den varPath musst evtl. noch irgendwo rausholen. Zitieren Link zu diesem Kommentar
syntax error 10 Geschrieben 1. April 2008 Autor Melden Teilen Geschrieben 1. April 2008 Uff... Nach einigem rumbasteln habe ich es immerhin geschafft irgendetwas umzubenennen und eine Abfragebox vorzuschalten. Dim Abfrage Abfrage = MsgBox("Alle Dateien im Verzeichnis werden umbenannt in den Datumsstempel der Datei." & vbLf & "Format 'JJJJ-MM-TT hh.mm.ss.xxx'. Weiter ?",4,"File Renamer") if Abfrage=vbNo then MsgBox "Umbenennung abgebrochen !" WScript.Quit else MsgBox "Umbenennung durchgeführt" end if set fso = CreateObject("Scripting.FileSystemObject") set file = fso.GetFile("c:\test\testfile.jpg") varFileName= year(file.datelastmodified) & "-" & month(file.datelastmodified) & "-" & day(file.datelastmodified) & " " varFileName = varFileName & hour(file.datelastmodified) & "." & minute(file.datelastmodified) & "." & Second(file.datelastmodified) file.Name = VarFileName file.Rename geht übrigens nicht. Das Eine Problemchen ist wie behalte ich die Dateiendung ? Ich könnte die auf z.B. .jpg festlegen wenn ich weiß dass ich nur Bilder umbenenne aber ich möchte das universell einsetzbar machen. Das Hauptproblem ist dass ich noch nicht durchgeblickt habe wie ich alle Dateien eines Verzeichnisses bearbeite. Vielleicht so ? set folder = fso.Getfolder("c:\test\") set file = folder.Files Aber das funzt irgendwie auch nicht. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 1. April 2008 Melden Teilen Geschrieben 1. April 2008 Wie ich oben bereits geschrieben hab mit Set folder = fso.GetFolder("C:\Scripte\") for each file in folder.Files ... next Die Schleife durchläuft dann alle Files. Den Original-Dateiname bekommst Du mit file.Name Den Original-Dateiname incl. Pfad bekommst Du mit file.Path Die Dateiendung musst Du Dir irgendwie rauspfriemeln. Sollte diese immer 3 Zeichen lang sein z.B. mit Right(file.Name,3) Zitieren Link zu diesem Kommentar
syntax error 10 Geschrieben 1. April 2008 Autor Melden Teilen Geschrieben 1. April 2008 OK Danke ! :jau: Das Script funktioniert jetzt soweit. Ein Problem habe ich noch mit dem Datum. Ich hätte gerne JJJJ-MM-TT hh.mm.ss was auch soweit funktioniert. Allerdings schreibt er mir bei einstelligen Zahlen keine Null davor was eine anständige Sortierung wieder hinfällig macht. Also 2008-4-1 anstatt 2008-04-01. Kann man das Datum formatieren oder muss ich jetzt eine Abfrage machen in der Art "wenn einstellig dann mache eine 0 davor". Wie solls gehen ? Dim Abfrage set fso = CreateObject("Scripting.FileSystemObject") set folder = fso.Getfolder(".") Abfrage = MsgBox("Alle Dateien im Verzeichnis " & folder & vbLf & "werden umbenannt in den Datumsstempel der Datei." & vbLf & "Format 'JJJJ-MM-TT hh.mm.ss.xxx'." & vbLf & "Wirklich Ausführen ?",4,"File Renamer") if Abfrage=vbNo then MsgBox "Umbenennung abgebrochen !" WScript.Quit end if for each file in folder.Files varFileName= year(file.datelastmodified) & "-" & month(file.datelastmodified) & "-" & day(file.datelastmodified) & " " varFileName = varFileName & hour(file.datelastmodified) & "." & minute(file.datelastmodified) & "." & Second(file.datelastmodified) & Right(file.Name,4) If fso.FileExists(VarFileName) Then MsgBox "Die Datei " & File & " konnte nicht umbenannt werden." & vbLf & "Der Dateiname " & VarFileName & " existiert bereits." & vbLf & "Vorgang Abgebrochen !" WScript.Quit end if file.Name = VarFileName next MsgBox "Umbenennung durchgeführt" Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 1. April 2008 Melden Teilen Geschrieben 1. April 2008 Ne Möglichkeit wäre: varFileName= year(file.datelastmodified) & "-" & right("0" & month(file.datelastmodified),2) & "-" & right("0" & day(file.datelastmodified),2) & " " D.h. bei Monat und Tag wir grundsätzlich eine 0 davor gehängt und dann aber nur die hinteren 2 Zeichen genommen. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 1. April 2008 Melden Teilen Geschrieben 1. April 2008 Was mir noch eingefallen ist: In dem Beispiel hab ich file.datelastmodified angegeben. Du wolltest aber eigentlich das Erstelldatum! Das wäre dann file.datecreated Zitieren Link zu diesem Kommentar
syntax error 10 Geschrieben 1. April 2008 Autor Melden Teilen Geschrieben 1. April 2008 Großartig, hab das auf die gesamte Zeichenkette ausgebaut. So geht es jetzt ! Allerdings ist kurioserweise datelastmodified korreckt. Zumindest bei meinen Dateien ist das Datum der Datei Erstellung mit dem Änderungsdatum identisch und das kopierdatum auf die Platte das Erstellt Datum . Das heißt Die Dateien sind geändert worden bevor sie erstellt wurden (???). Ist mir noch nie aufgefallen. Aber hat jetzt nichts mit der funktion zu tun. Windows...tsss Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 2. April 2008 Melden Teilen Geschrieben 2. April 2008 Wenn eine Datei erzeugt wird, ist DateCreated und DateLastmodified identisch. Unterschiedliche Daten bekommst Du erst, wenn die Datei bearbeitet wird! (nicht durch kopieren oder so, sondern durch öffnen und ändern) Zitieren Link zu diesem Kommentar
syntax error 10 Geschrieben 2. April 2008 Autor Melden Teilen Geschrieben 2. April 2008 Ich fand es logisch dass "DateCreated" das Datum ist wann die Datei erstellt wurde und "Datelastmodified" (bzw die Windows Gegenstücke) wann die Datei zuletzt bearbeitet wurde. Wenn die Datei (Textdatei z.B.) auf dem Rechner erstellt wurde dann stimmt es sogar. Witzig wird es nur wenn die Datei woanders erstellt wurde (Digitalfoto z.B.) Tatsächlich musste ich feststellen dass dann "Datelastmodified" das Datum ist wann die Datei kreiert wurde (in der Kamera) und "DateCreated" anscheinend das Datum ist wann die Datei auf dem Windows Datenträger gelandet ist. Merkwürden... Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.