Zum Inhalt wechseln


Foto

VBScript für Dateien umbenennen


  • Bitte melde dich an um zu Antworten
11 Antworten in diesem Thema

#1 syntax error

syntax error

    Newbie

  • 9 Beiträge

 

Geschrieben 31. März 2008 - 09:49

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.

#2 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 31. März 2008 - 13:23

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. ;)
My name is Frank, you can say you to me.

#3 syntax error

syntax error

    Newbie

  • 9 Beiträge

 

Geschrieben 31. März 2008 - 13:59

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)

#4 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 31. März 2008 - 14:33

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.
My name is Frank, you can say you to me.

#5 syntax error

syntax error

    Newbie

  • 9 Beiträge

 

Geschrieben 01. April 2008 - 09:07

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.

#6 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 01. April 2008 - 10:49

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)

My name is Frank, you can say you to me.

#7 syntax error

syntax error

    Newbie

  • 9 Beiträge

 

Geschrieben 01. April 2008 - 14:59

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"


#8 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 01. April 2008 - 15:16

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.
My name is Frank, you can say you to me.

#9 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 01. April 2008 - 15:22

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
My name is Frank, you can say you to me.

#10 syntax error

syntax error

    Newbie

  • 9 Beiträge

 

Geschrieben 01. April 2008 - 18:53

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

#11 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 02. April 2008 - 08:55

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)
My name is Frank, you can say you to me.

#12 syntax error

syntax error

    Newbie

  • 9 Beiträge

 

Geschrieben 02. April 2008 - 14:22

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...