Brauche eine kleine Hilfestellung bei einer VBS-Datei (Software)

NicO @, Wed, 30.03.2011, 07:07 (vor 4769 Tagen)

Hallo zusammen,

die folgende kleine vbs-Datei dient dazu (in diesem Fall) Bilddateien in mehreren Ordnern gleichzeitig umzubenennen.
Der Name setzt sich aus dem jeweiligen Ordnernamen zusammen in dem die Bilder liegen, sowie einer fortlaufenden dreistelligen Nummerierung.

Ich selbst kenne mich leider gar nicht mit vbs aus. Die Datei hat mir vor einiger Zeit mal jemand geschrieben zu dem ich keinen Kontakt mehr habe.

Nun zur Frage:
Derzeit werden die Dateien in der Reihenfolge sortiert nach dem ursprünglichen Dateinamen abgearbeitet.
Ich möchte jedoch gerne, dass sie nach dem Aufnahmedatum (nicht Änderungsdatum) der Bilddateien aufsteigend (ältestes zuerst) sortiert umbenannt werden damit anschließend die aufsteigenden Nummer auch der Reihenfolge der Aufnahme entspricht.

Könnte jemand die Funktion entsprechend einarbeiten?

Vielen Dank bereits im Voraus!
Gruß NicO

===============================

function RenameFiles(folder)
On Error Resume Next
dim fls, fon, fnn, fend, fext, i, errfiles
if folder.subfolders.count > 0 then
for each fld in folder.subfolders
errfiles = errfiles & RenameFiles(fld)
next
end if
if folder.files.count > 0 then
fls = "[" & folder.Name & "]" & vbcrlf
i = 1
for each fl in folder.files
fon = fl.name
fext = fso.GetExtensionName(fl.Path)
if exts.exists(fext) then
fnn = folder.Name & "_" & Right("000" & i ,3) & "." & fext
fl.name = fnn
if Err.Number <> 0 then
errfiles = errfiles & folder.Path & "" & fon & " (" & err.Description & ")" & vbcrlf
Err.Clear
end if
i = i + 1
end if
next
end if
renamefiles = errfiles
end function


dim fso
dim exts
Set fso = CreateObject("Scripting.FileSystemObject")

' Liste mit Dateitypen (Endungen) die umbenannt werden sollen

set exts = CreateObject("Scripting.Dictionary")
exts.Add "jpg",""
exts.Add "JPG",""


If WScript.Arguments.Count = 0 then
Path = InputBox("Bitte Pfad des Verzeichnisses angeben: (Unterverzeichnisse werden ebenfalls bearbeitet!)","Pfad eingeben")
else
Path = WScript.Arguments(0)
End If
if fso.FolderExists(Path) then
errfiles = renamefiles(fso.GetFolder(Path))
if Len(errfiles) > 0 then
WScript.Echo("Folgende Dateien konnten nicht umbenannt werden" & vbcrlf & errfiles)
end if
else
WScript.Echo("Der angegebene Pfad existiert nicht!")
end if
set fso = Nothing
set ext = Nothing

Bilddateien gemäß Aufnahmedatum umbenennen

Martin Vogel ⌂ @, Dortmund / Bochum, Wed, 30.03.2011, 09:36 (vor 4769 Tagen) @ NicO

Ich möchte jedoch gerne, dass sie nach dem Aufnahmedatum (nicht
Änderungsdatum) der Bilddateien aufsteigend (ältestes zuerst) sortiert
umbenannt werden damit anschließend die aufsteigenden Nummer auch der
Reihenfolge der Aufnahme entspricht.

[image]Wäre es nicht sinnvoll, den Dateinamen gleich gemäß dem Aufnahmedatum zu setzen? Ich mache das seit Jahren so und finde es sehr praktisch, weil dann auch Bilder mehrerer Kameras problemlos gemischt werden können.

Als ich noch Windows nutzte, hatte ich dazu mal ein kleines Progrämmchen geschrieben (das griff allerdings noch auf das Änderungsdatum zu): http://www.martinvogel.de/prog/tren.htm

Unter Linux lässt sich das einfach mit einem Shellscript machen (hier für das Kontextmenü von Nautilus zum Umbenennen aller Fotos eines ganzen Verzeichnisses gemäß dem EXIF-Aufnahmedatum):

#!/bin/bash

cd $NAUTILUS_SCRIPT_CURRENT_URI

renrot --mtime --name-template="%Y-%m-%d_%Hh%M-%S" --extension jpg
renrot --mtime --name-template="%Y-%m-%d_%Hh%M-%S" --extension JPG

[image]Das benötigte Programm renrot (das ganz nebenbei auch noch die Bilder so ins Hoch- oder Querformat dreht, dass sie auch in wirklich jedem Programm richtig angezeigt werden) lässt sich unter Ubuntu Linux ganz einfach über die Paketverwaltung installieren: „renrot“ markieren, „Anwenden“ klicken, fertig.

Unter Windows ist die Softwareinstallation wie üblich ziemlich frickelig, da das Betriebssystem weder über eine Paketverwaltung noch eine Abhängigkeitskontrolle verfügt. Eine ausführliche Anleitung findet man auf http://svn.gnu.org.ua/sources/renrot/trunk/README.Windows

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Bücher:
CAD mit BricsCAD
Bauinformatik mit Python

das wäre eine Möglichkeit, aber...

NicO @, Wed, 30.03.2011, 10:22 (vor 4769 Tagen) @ Martin Vogel

Wäre es nicht sinnvoll, den
Dateinamen gleich gemäß dem Aufnahmedatum zu setzen? Ich mache das seit
Jahren so und finde es sehr praktisch, weil dann auch Bilder mehrerer
Kameras problemlos gemischt werden können.

Erstmal vielen Dank für die schnelle Antwort!

Das Bild nach dem Aufnahmedatum zu benennen hat bestimmt
in manchen Situationen seine Vorteile.
Ich gebe jedoch häufig einzelne Bilder aus den jeweiligen Bilderordnern
weiter, oder stelle sie online
zur Verfügung und dann finde ich es sehr praktisch und für
den Betrachter ganz hilfreich wenn die "Situation/Ort" = Ordnername
als Dateiname zu sehen ist. Ich muss dann nicht gesonderte Ordner erstellen und die Bilder darin ablegen, sondern kann mehrere Bilder unterschiedlicher Themen in ein Verzeichnis legen und es bleibt trotzdem übersichtlich.

Das Mischen von Aufnahmen mehrerer Kameras wäre bei meiner Variante ja
ebenso problemlos möglich. Die Bilder sollen ja, so wie Sie es auch als praktisch beschrieben haben, nach Aufnahmedatum sortiert und dann wie beschrieben nummeriert werden.

Das Drehen der Bilder gem. exif-Daten wäre natürlich zusätzlich eine tolle Sache - wäre das auch innerhalb eines vb-scripts zu realisieren...? :lookaround:

Åke Storck: SetNameToTime 2.4.10

Martin Vogel ⌂ @, Dortmund / Bochum, Wed, 30.03.2011, 11:18 (vor 4769 Tagen) @ NicO

dann finde ich es sehr praktisch und für den Betrachter ganz hilfreich wenn die "Situation/Ort" = Ordnername als Dateiname zu sehen ist.

[image]Von Åke Storck gibt es für 10 Dollar ein sehr praktisches Programm für Windows, das genau das leistet. Bilddateien können damit nach nahezu jedem beliebigen Schema umbenannt werden. Das Programm SetNameToTime 2.4.10 ist als 30-Tage-Demo beim Programmierer erhältlich: http://setnametotime.netfirms.com/setnametotim.htm

Das Ausgabeformat kann beliebig angepasst werden. Dutzende von EXIF-Informationen können über Platzhalter wie %year, %minute, %gpslatitute oder %isospeedratings zusammengesetzt werden, aber auch Dateisysteminformationen wie das aktuelle oder das übergeordnete Verzeichnis lassen sich über „subfolder(0)“ bzw. „subfolder(1)“ in den neuen Namen einbauen.

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Bücher:
CAD mit BricsCAD
Bauinformatik mit Python

... so funktioniert's!

NicO @, Wed, 30.03.2011, 12:12 (vor 4769 Tagen) @ Martin Vogel

[image]

Das Programm kannte ich noch nicht. Sehr praktisch!

Wie schalte ich darin aber die (siehe 1. Eintrag) gewünschte "Vorsortierung" nach Aufnahmezeitpunkt VOR die Nummerierung?

Man kann zwar den Aufnahmezeitpunkt in den Dateinahmen integrieren,
aber ein Sortieren und dann erst Nummerieren, worum es hauptsächlich ging, finde ich nicht.

... oder habe ich es nur übersehen? :confused:

Die einzige Möglichkeit scheint mir zu sein alles zweimal durchlaufen zu lassen.
Also zunächst alles umbenennen nach Zeit:
%year
%month
%date
%hour
%minute
%second
%extension

und anschließend in die gewünschte Endform:
„subfolder(0)” (besteht bei mir bereits aus %year-%month-%date + Situation/Ort)
_
%counter
%extension

Das führt zum gewünschten Ergebnis!

Vielen Dank für die Hilfe

:ok:

Vorsortierung

Martin Vogel ⌂ @, Dortmund / Bochum, Wed, 30.03.2011, 13:22 (vor 4769 Tagen) @ NicO

Wie schalte ich darin aber die (siehe 1. Eintrag) gewünschte
"Vorsortierung" nach Aufnahmezeitpunkt VOR die Nummerierung?

So, wie es aussieht, lässt sich die Eingangsliste nicht nach eigenen Kriterien sortieren. Vielleicht ist der Programmierer ja für Anregungen zur Verbesserung des Programms ansprechbar.

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Bücher:
CAD mit BricsCAD
Bauinformatik mit Python

RSS-Feed dieser Diskussion
powered by my little forum