Jump to content

VBScript für Dateien umbenennen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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)

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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)

Link zu diesem Kommentar

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"

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...