Microsoft MVPs inside





 MCSEboard.de MCSE Forum zu Windows XP / 2003 / 2008 Server & Windows Vista / Windows 7
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

Windows Forum — Scripting


Alles zum Thema System Administration Scripting — Q & A zum Thema Scripting: Batch, VBS, WMI, PowerShell


Antwort
     
Themen-Optionen
Alt 31.03.2008, 11:49   #1
Newbie
 
Benutzerbild von syntax error
 
Offline
Registriert seit: 03-2007
Beiträge: 9
VBScript für Dateien umbenennen

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.
    Mit Zitat antworten
Alt 31.03.2008, 15:23   #2
Expert Member
 
Benutzerbild von Cybquest
 
Offline
Registriert seit: 12-2006
Ort: Weinsberg
Beiträge: 1.508
Hier mal'n Codeschnippsel...
Code:
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.

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

    Mit Zitat antworten
Alt 31.03.2008, 15:59   #3
Newbie
 
Benutzerbild von syntax error
 
Offline
Registriert seit: 03-2007
Beiträge: 9
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
Code:
Set fso = CreateObject("Scripting.FileSystemObject")
rein muss...

(Um das Das "If Exist" Doppelte Datei Ding kümmere ich mich später im Feintuning)
    Mit Zitat antworten
Alt 31.03.2008, 16:33   #4
Expert Member
 
Benutzerbild von Cybquest
 
Offline
Registriert seit: 12-2006
Ort: Weinsberg
Beiträge: 1.508
Nu ja, wie gesagt ein Codeschnippsel Originalzitat von Dir: "...ein paar hilfreiche Brocken Code hinwerfen..."

Umbenennen einer Datei z.B. mit
Code:
file.Rename(varPath & varFileName)
...den varPath musst evtl. noch irgendwo rausholen.

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

    Mit Zitat antworten
Alt 01.04.2008, 11:07   #5
Newbie
 
Benutzerbild von syntax error
 
Offline
Registriert seit: 03-2007
Beiträge: 9
Uff... Nach einigem rumbasteln habe ich es immerhin geschafft irgendetwas umzubenennen und eine Abfragebox vorzuschalten.
Code:
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 ?
Code:
set folder = fso.Getfolder("c:\test\")
set file = folder.Files
Aber das funzt irgendwie auch nicht.
    Mit Zitat antworten
Alt 01.04.2008, 12:49   #6
Expert Member
 
Benutzerbild von Cybquest
 
Offline
Registriert seit: 12-2006
Ort: Weinsberg
Beiträge: 1.508
Wie ich oben bereits geschrieben hab mit
Code:
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
Code:
Right(file.Name,3)

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

    Mit Zitat antworten
Alt 01.04.2008, 16:59   #7
Newbie
 
Benutzerbild von syntax error
 
Offline
Registriert seit: 03-2007
Beiträge: 9
OK Danke ! 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 ?

Code:
 
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"
    Mit Zitat antworten
Alt 01.04.2008, 17:16   #8
Expert Member
 
Benutzerbild von Cybquest
 
Offline
Registriert seit: 12-2006
Ort: Weinsberg
Beiträge: 1.508
Ne Möglichkeit wäre:
Code:
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.

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

    Mit Zitat antworten
Alt 01.04.2008, 17:22   #9
Expert Member
 
Benutzerbild von Cybquest
 
Offline
Registriert seit: 12-2006
Ort: Weinsberg
Beiträge: 1.508
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

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

    Mit Zitat antworten
Alt 01.04.2008, 20:53   #10
Newbie
 
Benutzerbild von syntax error
 
Offline
Registriert seit: 03-2007
Beiträge: 9
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
    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
DFS Dateien Umbenennen SilverSoul Windows Forum — Allgemein 4 16.10.2008 22:13
.xml-Dateien sichern mit reinem VBScript Baw Windows Forum — Scripting 2 26.02.2008 19:06
Vista - Besitzerrechte von VBScript Dateien ändern Coollaminator Windows Vista Forum 4 06.03.2007 10:06
Dateien umbenennen 2b2cu Windows Forum — Allgemein 17 07.10.2004 20:24
Umbenennen von Dateien Greg Off Topic 7 30.09.2003 14:57


Alle Zeitangaben in MEZ/CET. Es ist jetzt 00:38 Uhr. Seite generiert in 0,076 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang