Das Script stelle ich gerne zur Verfügung. Es ist aber noch Zeiten (mehr als 10 Jahre her), als man für Objekte noch Bibliotheken nutzen musste und benutzt Kommandozeilentools.
Code: Select all
;
; AutoHotkey Version: 1.x
; Language: Deutsch
; Platform: Win9x/NT
; Author: fredchf
;
; Script Function:
/*
Bilddateien(jpg) mit Hilfe von EXIF-Informationen Umbenennen und Verschieben
#######################################
benötigte Dateien: jhead.exe,jpegtran.exe
########################################
Thanks To: die Authoren von jhead und jpegtran
from : http://www.sentex.net/~mwandel/jhead/
from : http://jpegclub.org/
Änderungen:
* Version 2.1.3 vom 02.03.2010 22:29:59
* var doppelt vergeben(uordner)
* leere unterordner wurden erstellt auch wenn nicht gewählt
* Version 2.1.2 vom 27.01.2010 07:25:09
* neue Var(%cama%)
* alternativpfade für ziel
* sprache über radios wechseln
* Version 2.1.1 vom 26.01.2010 06:13:18
* Bug mit var 'N' beseitigt(wurde in subroutine pstring geleert)
* Version 2.1.0 vom 21.01.2010 23:20:59
* neue Var(%NN%) für Ziffern aus altem Dateinamen
* Version 2.0.9 vom 03.12.2009 06:15:46
* Bug beim kopieren der RAW-Dateien behoben
* Version 2.0.8 vom 02.12.2009 06:15:46
* Tab mit Einstellungen
* Version 2.0.7 vom 23.11.2009 19:45:31
* teilweise in Englisch mit ini-Option "English = 1"
* Version 2.0.6 vom 21.08.2009 16:27:01
* 2 neue mögliche schlüssel in ini(kopi_raw;raw_ext)
* "kopi_raw=1" ermöglicht das kopieren gleichnamiger ausgangs-RAW-dateien in zusätzliche unterordner namens "RAW"
* benötigt wird dann auch die Option "raw_ext=",etwa "cr2"
* Version 2.0.5 vom 9.01.2009 22:06:20
* bei fehlenden exif-infos kann nun fortgefahren werden(für ChrDark)
* Version 2.0.4 vom 26.12.2008 20:52:31
* Problem mit "Carriage Return & Linefeed" führte in der Ansicht der Logdatei mit Editor zu Darstellungsfehlern
* auf einigen Systemen funktionierte die Autorotation auch mit vorhandenen Orientierungsinfos nicht
* (wechsel des A_WorkingDir scheint Abhilfe zu schaffen)
* Default-Schriftgröße
* Version 2.0.3 vom 22.12.2008 17:04:50
* negierte wirkung durch ini-schlüssel korrigiert(ein fehlendes zeichen "!")
* Version 2.0.2 vom 22.12.2008 14:25:51
* option zum kopieren statt verschieben(ini-eintrag bei bedarf kopieren=1)
* Version 2.0.1 vom 21.12.2008 13:20:41
* simple prüfung der ordner
* log angepasst
* Version 2.0.0 vom 19.12.2008 19:41:17
* fast völlige Neukonstruktion der gui und des Ablaufs
* optionale Rotation der Bilder bei vorhandenen Orientierungsinformationen
* optionale Berücksichtigung von Unterordnern im Aufnahmeordner
* wechsel der Zusatztools(jhead.exe,jpegtran.exe statt exiv2.exe)
*/
Version = Version 2.1.3 vom 02.03.2010 22:30:16
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#NoTrayIcon
SetBatchLines, -1
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SplitPath, A_ScriptFullPath, , , , OutNameNoExt,
ini = %A_ScriptDir%\settings_%OutNameNoExt%.ini
log_datei = %A_ScriptDir%\log_%OutNameNoExt%.txt
tmp = %A_Temp%\Renamer.tmp
; -----------------------benötigte Dateien------------------------------
FileInstall, jhead.exe, %A_Temp%\jhead.exe, 1 ; jhead.exe -autorot 2.jpg
FileInstall, jpegtran.exe, %A_Temp%\jpegtran.exe, 1
; -----------------------------------------------------------------------
IfNotExist, %ini%
Gosub, FirstRun
Gosub, inir
Gosub, lng
; ----Menü-------------------------------------------------------------------
erster=%A_YYYY%\%A_MMMM%
Menu, vmenü, add, %Vorlagen%, ordnerbs, ;Menü erzeugen
Menu, vmenü, add, , ,
Menu, vmenü, add, \%erster%\, setordner1,
Menu, vmenü, add, \%letztekam1% %letztekam%\%erster%\, setordner2,
Menu, vmenü, add, \%erster%\%A_DDDD%\, setordner3,
Menu, vmenü, add, \%erster%\%A_DDDD% den %A_DD%.\, setordner4,
Menu, vmenü, add, \%erster%\%A_DD%.%A_MM%.%A_YYYY%\, setordner5,
Menu, vmenü, add, \%A_DDDD% %A_DD%.%A_MM%.%A_YYYY%\, setordner6,
Menu, tray, add, list Vars, lvars,
; -----------------------------------------------------------------------
Hotkey, ESC, abbruch, Off
; -----------------------------------------------------------------------
Gui, Color, F4F3FF
Gui, Add, Tab, w482 h300 , %Dateiname%|%Unterordner%|%Einstellungen%
Gui, Tab, %Dateiname%
Gui, font, S9
Gui, Add, Edit, x20 y55 w365 -Wrap +ReadOnly vaufnahmeordner, %aufnahmeordner%
Gui, Add, ComboBox, xp y+35 wp -Wrap vziel, % set_combo(alt_ziel, ziel)
Gui, Add, ComboBox, xp R10 y+30 wp h20 vcombo gcombo, %comb%
Gui, Add, Text, xp y+38 wp vname_vorschau,
Gui, Add, Button, x+10 y70 w90 h45 -Wrap gandern vandern, %Pfade_ändern%
Gui, Add, Button, xp y+35 wp h30 -Wrap gabbruch vabbruch, %Abbruch%
Gui, Add, Button, xp y+5 wp h30 -Wrap gstart Default vstart, %Start%
Gui, Add, Button, xp y+5 wp h30 gmsbox vmsg, %Hilfe%
Gui, Add, GroupBox, x15 y35 w375 h50 vg4, %Ausgangsordner_für_Bilder%
Gui, Add, GroupBox, xp y+5 wp hp vg3, %Zielordner_für_Bilder%
Gui, Add, GroupBox, xp y+5 wp hp vg2, %Dateiname%
Gui, Add, GroupBox, xp y+5 wp hp vg1, %Vorschau_für_den_Namen%
; ------------------------------------------------------------------------------
Gui, Tab, %Unterordner%
Gui, Add, Button, x386 y33 w90 h30 gmsbox2, %Hilfe%
Gui, Add, Edit, x20 y+125 w380 h20 -Wrap +ReadOnly +Center voexam,
Gui, Add, Button, x+5 yp w60 hp -Wrap gmenu vMenu, %Vorlagen%
Gui, Add, Edit, x20 y+35 w380 h20 -Wrap +Center cRed vuordner gordnerbs, %uordner%
Gui, Add, Checkbox, x20 y78 h30 Checked%unterordner_ch% vunterordner_ch, %Unterordner_im_Ziel_erstellen%
Gui, Add, Checkbox, xp y+20 h30 Checked%Checkunterordner% vRecurse, %Unterordner_im_Ausgangsordner_berücksichtigen%
Gui, Add, GroupBox, x15 y60 w470 h50, %Unterordner_Erstellen_group%
Gui, Add, GroupBox, xp y+5 wp hp, %unterordner_mit_ein_group%
Gui, Add, GroupBox, xp y+5 wp hp, %aktuelle_einst_group%
Gui, Add, GroupBox, xp y+5 wp hp , %Ergebnis_im_group%
Gui, Tab, %Einstellungen%
Gui, Add, Checkbox, x20 y48 h30 Checked%explore_ziel% vexplore_ziel, %zielordner_öffnen_wenn_fertig%
Gui, Add, Checkbox, xp y+15 h30 Checked%kopieren% vkopieren, %nur_kopieren%
Gui, Add, Checkbox, xp y+20 Checked%autorotation% vCheckbox_rot, %Autorotation_der_bilder%
Gui, Add, Checkbox, xp y+20 Checked%kopi_raw% vkopi_raw gcontrol, %gleichnamige_raw_kopieren%
Gui, Add, edit, x+10 w35 h20 vraw_ext, %raw_ext%
Gui, Add, radio, % "x20 y+25 Checked" (eng) " gsprache", Englisch
Gui, Add, radio, % "x+5 vsprache gsprache Checked" (!eng), Deutsch
Gui, Show, , %titel%
Gosub, ordnerbs
Gosub, control
GuiControl, Focus, start,
GuiControl, , combo, %lcomb%||
Gosub, nbeispiel
Return
; ------------------------------------------------------------------------------
lvars: ; nur erreichbar mit trayicon
ListVars
Return
; -----------------------------------------------------------------------
control:
gui, Submit, NoHide
GuiControl, % (kopi_raw ? "Enable" : "Disable"), raw_ext,
Return
; -----------------------------------------------------------------------
sprache:
gui, Submit, NoHide
IniWrite, % (sprache = 1 ? "1" : "0"), %ini%, Settings, English ;in ini schreiben
Reload
Return
; -----------------------------------------------------------------------
msbox:
Gui, +OwnDialogs
cama := FirstNumericString(cam)
RegExMatch(N, "\d+", NN)
if eng
txt_m =
(
possible variables for the filenames:
(enclose by percent sign "`% ")
ss`tSeconds digit
min`tMinutes digit
hh`tHours digit
dd`tDay digit(%A_DD%)
MM`tMonth digit(%A_MM%)
MM1`t(e. g.: %A_MMMM%)
yyyy`tYear (four digit,%A_YEAR%)
yy`tYear (two digit)
day`t%A_DDDD%
cam`tCameramodel (%cam%)
cama`tCameramodel shortcut (%cama%)
camh`tCameramanufacturer (%camh%)
N`told Filename(%N%)
NN`told Filename(only digits,%NN%)
Attention, these characters do not use:\ / :`" * ?<> |
%version%
)
Else
txt_m =
(
mögliche Variablen für den Dateinamen sind:
(durch Prozentzeichen"`%" umschliessen)
ss`tSekunden zweistellig
min`tMinuten zweistellig
hh`tStunden zweistellig
dd`tTag zweistellig(%A_DD%)
MM`tMonat zweistellig(%A_MM%)
MM1`t(zum Beispiel: %A_MMMM%)
yyyy`tJahr (4stellig,%A_YEAR%)
yy`tJahr (2stellig)
day`t%A_DDDD%
cam`tKameramodell (%cam%)
cama`tKameramodell Abkürzung (%cama%)
camh`tKamreahersteller (%camh%)
N`talter Dateiname(%N%)
NN`talter Dateiname(nur zusammenhängende Ziffern,%NN%)
ACHTUNG,diese Zeichen nicht verwenden:\ / :`" * ?<> |
%version%
)
MsgBox, 64, Hilfe, %txt_m%
Return
; -----------------------------------------------------------------------
msbox2:
Gui, +OwnDialogs
cama := FirstNumericString(cam)
if eng
txt_m =
(
possible variables for the foldernames:
(enclose by percent sign "`% ")
dd`tDay digit(%A_DD%)
MM`tMonth gigit(%A_MM%)
MM1`t(e. g.: %A_MMMM%)
yyyy`tYear (four digits,%A_YYYY%)
yy`tYear (2 digit)
day`t%A_DDDD%
cam`tCameramodel (%cam%)
cama`tCameramodel shortcut(%cama%)
camh`tCameramanufacturer (%camh%)
Attention, these characters do not use:\ / :`" * ?<> |
%version%
)
Else
txt_m =
(
mögliche Variablen für die Unterordner sind:
(durch Prozentzeichen"`%" umschliessen)
dd`tTag zweistellig(%A_DD%)
MM`tMonat zweistellig(%A_MM%)
MM1`t(zum Beispiel: %A_MMMM%)
yyyy`tJahr (4stellig,%A_YYYY%)
yy`tJahr (2stellig)
day`t%A_DDDD%
cam`tKameramodell (%cam%)
cama`tKameramodell Abkürzung(%cama%)
camh`tKamreahersteller (%camh%)
ACHTUNG,diese Zeichen nicht verwenden:\ / :`" * ?<> |
%version%
)
MsgBox, 64, Hilfe, %txt_m%
Return
; -----------------------------------------------------------------------
start:
Gui, Submit, NoHide
Gosub, iniw
Gosub, kontrolle
If err
Return
Hotkey, ESC, abbruch, On
Gosub, hide_controls
Gosub, gui_add
Loop,%aufnahmeordner%\*.jpg,0,%Recurse% ;Dateien zählen
files2++
If !files2
{
MsgBox, Keine Bilder in %aufnahmeordner% gefunden.
Gosub, iniw
Sleep, 200
Reload
ExitApp
}
FileDelete, %log_datei%
; ----------------------------
Loop, %aufnahmeordner%\*.jpg, , %Recurse% ;Schleife für jede JPG-Datei im "aufnahmeordner" Starten
{
string1 = 0
string2 =
r =
IfExist, %tmp%
FileDelete, %tmp%
SplitPath, A_LoopFileLongPath, , , , N,
RunWait, %ComSpec% /c %A_Temp%\jhead.exe "%A_LoopFileLongPath%" >"%tmp%", , Hide
FileRead, tt, *t %tmp%
Gosub, pstring
If yyyy = ; keine gültigen EXIF-Informationen
{
Gui, +OwnDialogs
MsgBox, 17, , Die folgene Datei enthält keine gültigen EXIF-Infos.`n%a_loopFileName%`n`nWeiter?
IfMsgBox, Cancel
ExitApp
Continue
}
Gosub, getformated_time
proz := Round((100/files2*A_Index), 1) ;Berechnung für den Fortschrittsbalken
; ------------------------------Ordner erstellen------------------------------------------------
if(unterordner_ch and !FileExist(ziel "\" Deref(uordner)))
{
FileCreateDir, % ziel "\" Deref(uordner)
If ErrorLevel
{
MsgBox, 4112, , % "Zielordner konnte nicht erstellt werden!`nAbbruch`n`n" ziel "\" Deref(uordner)
ExitApp
}
}
; ------------------------------------------------------------------------------
If kopi_raw
{
raw_ordner := ziel "\" (!unterordner_ch ? "" : Deref(uordner)) "\RAW"
IfNotExist, %raw_ordner%
{
FileCreateDir, %raw_ordner%
If ErrorLevel
{
MsgBox, 4112, , % "Zielordner konnte nicht erstellt werden!`nAbbruch`n`n" raw_ordner
ExitApp
}
}
}
FileName := ziel "\" Deref(uordner) "\" Deref(combo)
If !unterordner_ch ; Nutzer wünscht keine Unterordner
FileName := ziel "\" Deref(combo)
Loop, ; evtl. zähler anhängen
{
IfNotExist, % FileName string2 ".jpg"
Break
SetFormat, Float, 02.0
string1 += 01.0
string2 := " " string1
}
FileName := FileName string2 ".jpg"
SplitPath, FileName, OutFileName2, , , ,
GuiControl, , pic, *w100 *h-1 %A_LoopFileLongPath% ;verändert Controls in der Gui
GuiControl, , aktuelles, % "von:`n" a_loopFileName "`nnach:`n" OutFileName2 "`n`n" A_Index " von " files2 " (" proz "%)`n" calc_kb(A_LoopFileSize, 2) " " (if mrot ? "#mit Rotation#" : "") ;verändert Controls in der Gui
GuiControl, , Progresss, %proz% ;verändert Controls in der Gui
GuiControl, , Text22, %proz%`% ;verändert Controls in der Gui
; ------------------------------------------------------------------------------
if kopi_raw
{
SplitPath, A_LoopFileLongPath, raw_OutFileName, raw_OutDir, , raw_OutNameNoExt,
SplitPath, FileName, , rawto_OutDir, , rawto_OutNameNoExt,
}
; ------------------------------------------------------------------------------
If !kopieren
FileMove, %A_LoopFileLongPath%, %FileName%
Else
FileCopy, %A_LoopFileLongPath%, %FileName%
If ErrorLevel
{
MsgBox, 4112, , Die folgene Datei konnte nicht korrekt (Fehlercode %ErrorLevel%) in Zielordner verschoben werden!`nAbbruch`n`n%FileName%
ExitApp
}
; ------------------------------------------------------------------------------
if kopi_raw
{
If !kopieren
{
FileMove, %raw_OutDir%\%raw_OutNameNoExt%.%raw_ext%, %raw_ordner%\%rawto_OutNameNoExt%.%raw_ext%,
FileAppend, % append() "`nRAW-kopieren von " raw_OutDir "\" raw_OutNameNoExt "." raw_ext " nach " raw_ordner "\" rawto_OutNameNoExt "." raw_ext "`n`n", %log_datei% ;verändert Controls in der Gui
}
Else
{
FileCopy, %raw_OutDir%\%raw_OutNameNoExt%.%raw_ext%, %raw_ordner%\%rawto_OutNameNoExt%.%raw_ext%
FileAppend, % append() "`nRAW-kopieren von " raw_OutDir "\" raw_OutNameNoExt "." raw_ext " nach " raw_ordner "\" rawto_OutNameNoExt "." raw_ext "`n`n", %log_datei% ;verändert Controls in der Gui
}
If ErrorLevel
{
MsgBox, 4112, , Die folgene Datei konnte nicht korrekt (Fehlercode %ErrorLevel%)in Zielordner verschoben werden!`nAbbruch`n`n%rawto_OutDir%%rawto_OutNameNoExt%.%raw_ext%
ExitApp
}
}
; ------------------------------------------------------------------------------
If (Checkbox_rot and mrot)
RunWait, "%A_Temp%\jhead.exe" -autorot "%FileName%", %A_Temp%, Hide
Gosub, settime
FileAppend, % append() "`nvon: " A_LoopFileLongPath "`nnach: " FileName "`n" A_Index " von " files2 " (" proz "%)`n" calc_kb(A_LoopFileSize, 2) "`n" (if mrot ? "#mit Rotation#" : "") "`n`n" tt "`n`n", %log_datei% ;verändert Controls in der Gui
}
; -------------------------------
Gosub, iniw
if explore_ziel
Run, % ziel "\" Deref(uordner) ;Ordner Öffnen
Gui, +OwnDialogs
MsgBox, 292, %Logdatei%, %msg_log%, 15
IfMsgBox, Yes
Run, %log_datei% ;Logdatei öffnen
ExitApp
; -----------------------------------------------------------------------
andern: ;Pfade ändern
Gui, +OwnDialogs
FileSelectFolder, aufnahmeordner, *%aufnahmeordner%, 1, %Select_folder_from%
If ErrorLevel
Return
FileSelectFolder, ziel, *%ziel%, 1, %Select_folder_to%
If ErrorLevel
Return
Gosub, iniw
Reload
; -----------------------------------------------------------------------
combo:
nbeispiel: ; Namensbeispiel erstellen
GuiControlGet, combo, , combo,
cam = %letztekam%
camh = %letztekam1%
ss = %A_Sec%
min = %A_Min%
hh = %A_Hour%
dd = %A_DD%
MM = %A_MM%
yyyy = %A_YYYY%
Gosub, getformated_time
GuiControl, , name_vorschau, % Deref(combo) ".jpg"
Return
; -----------------------------------------------------------------------
ordnerbs: ; Beispielordner erstellen
GuiControlGet, uordner, , uordner,
cam = %letztekam%
camh = %letztekam1%
ss = %A_Sec%
min = %A_Min%
hh = %A_Hour%
dd = %A_DD%
MM = %A_MM%
yyyy = %A_YYYY%
Gosub, getformated_time
; uordner := Deref(uordner)
GuiControl, , oexam, % "\" Deref(uordner) "\"
Return
; -----------------------------------------------------------------------
menu:
Menu, vmenü, show
Return
; -----------------------------------------------------------------------
setordner1: ;Menü-Unterpunkte
GuiControl, , uordner, `%yyyy`%\`%MM1`%
Gosub, ordnerbs
Return
setordner2:
GuiControl, , uordner, `%camh`% `%cam`%\`%yyyy`%\`%MM1`%
Gosub, ordnerbs
Return
setordner3:
GuiControl, , uordner, `%yyyy`%\`%MM1`%\`%day`%
Gosub, ordnerbs
Return
setordner4:
GuiControl, , uordner, `%yyyy`%\`%MM1`%\`%day`% den `%dd`%.
Gosub, ordnerbs
Return
setordner5:
GuiControl, , uordner, `%yyyy`%\`%MM1`%\`%dd`%.`%MM`%.`%yyyy`%
Gosub, ordnerbs
Return
setordner6:
GuiControl, , uordner, `%day`% `%dd`%.`%MM`%.`%yyyy`%
Gosub, ordnerbs
Return
; -----------------------------------------------------------------------
abbruch:
GuiClose:
ExitApp
; -----------------------------------------------------------------------
inir: ; Einstellungen lesen
IniRead, letztekam, %ini%, Settings, letztekamera, FinePix F30
IniRead, eng, %ini%, Settings, English, 0
IniRead, letztekam1, %ini%, Settings, letztekamera_hersteller, FUJIFILM
IniRead, N, %ini%, Settings, letzter_dateiname, DSC_1234
IniRead, lcomb, %ini%, Settings, lcomb, `%dd`%-`%MM`%-`%yyyy`% `%hh`%.`%min`% `%day`%
IniRead, comb, %ini%, Settings, comb, `%dd`%-`%MM`%-`%yyyy`% `%hh`%.`%min`% `%day`%||`%dd`%-`%MM`%-`%yyyy`% `%hh`%.`%min`%|`%YYYY`%-`%MM`%-`%DD`% `%hh`%.`%min`%|`%dd`%-`%MM`%-`%yyyy`% `%hh`%.`%min`% `%day`% `%camh`% `%cam`%|`%dd`%-`%MM`%-`%yyyy`% `%hh`%.`%min`% `%day`% `%cam`%|`%dd`%-`%MM`%-`%yyyy`% `%hh`%.`%min`% `%day`% `%N`%|
IniRead, ziel, %ini%, Settings, ziel,
IniRead, alt_ziel, %ini%, Settings, alt_ziel, %A_Space%
alt_ziel := (!alt_ziel ? ziel "|" : alt_ziel)
IniRead, aufnahmeordner, %ini%, Settings, aufnahmeordner, ;Wert aus der ini lesen
IniRead, Checkunterordner, %ini%, Settings, Unterordner_erstellen, 1
IniRead, autorotation, %ini%, Settings, autorotation, 1
IniRead, kopieren, %ini%, Settings, kopieren, 0
IniRead, unterordner_ch, %ini%, Settings, unterordner, 1
IniRead, kopi_raw, %ini%, Settings, kopi_raw, 0
IniRead, raw_ext, %ini%, Settings, raw_ext, cr2
IniRead, explore_ziel, %ini%, Settings, explore_ziel, 1
If (ziel = "") OR (ziel = "Error")
{
MsgBox, 16, ,%ini% fehlerhaft`nggf. löschen!
ExitApp
}
If (aufnahmeordner = "") OR (aufnahmeordner = "Error")
{
MsgBox, 16, ,%ini% fehlerhaft`nggf. löschen!
ExitApp
}
IniRead, uordner, %ini%, Settings, uordner, `%yyyy`%\`%MM1`% ;Wert aus der ini lesen
if (if kopi_raw and if !raw_ext)
MsgBox, 16, Fehlerhafte ini, Wenn in der Ini-Datei das RAW-Kopieren aktiviert ist`,muss auch der Schlüssel "raw_ext" mit der Erweiterung existieren.`nAbbruch!
Return
; -----------------------------------------------------------------------
iniw: ; Einstellungen speichern
IfNotInString, comb, %combo%
comb = %comb%%combo%|
IniWrite, %comb%, %ini%, Settings, comb ;wenn nicht,zur Liste hinzufügen
; MsgBox, % combo
IniWrite, %combo%, %ini%, Settings, lcomb ;Eintrag in ini-Datei für den letzten Dateinamen schreiben
IniWrite, %uordner%, %ini%, Settings, uordner ;in ini schreiben
IniWrite, %Checkunterordner%, %ini%, Settings, Unterordner_erstellen ;in ini schreiben
IniWrite, %comb%, %ini%, Settings, comb ;in ini schreiben
IniWrite, %cam%, %ini%, Settings, letztekamera ;in ini schreiben
IniWrite, %camh%, %ini%, Settings, letztekamera_hersteller ;in ini schreiben
if N
IniWrite, %N%, %ini%, Settings, letzter_dateiname ;in ini schreiben
IniWrite, %Checkbox_rot%, %ini%, Settings, Autorotation ;in ini schreiben
IniWrite, %unterordner_ch%, %ini%, Settings, unterordner ;in ini schreiben
IniWrite, %Aufnahmeordner%, %ini%, Settings, Aufnahmeordner ;in ini schreiben
IniWrite, %explore_ziel%, %ini%, Settings, explore_ziel ;in ini schreiben
IniWrite, %kopieren%, %ini%, Settings, kopieren ;in ini schreiben
IniWrite, %raw_ext%, %ini%, Settings, raw_ext ;in ini schreiben
IniWrite, %kopi_raw%, %ini%, Settings, kopi_raw ;in ini schreiben
alt_ziel := (!InStr(alt_ziel, ziel "|") ? alt_ziel ziel "|" : alt_ziel)
IniWrite, %alt_ziel%, %ini%, Settings, alt_ziel ;in ini schreiben
IniWrite, %ziel%, %ini%, Settings, ziel ;in ini schreiben
Return
; -----------------------------------------------------------------------
firstrun: ; keine ini da
FileSelectFolder, aufnahmeordner, , 1, %Select_folder_from% ;Ordner wählen
If ErrorLevel
{
MsgBox, Nichts gewählt!
ExitApp
}
FileSelectFolder, ziel, *%aufnahmeordner%, 1, %Select_folder_to% ;Ordner wählen
If ErrorLevel
{
MsgBox, Nichts gewählt!
ExitApp
}
IniWrite, %aufnahmeordner%, %ini%, Settings, aufnahmeordner ;in ini schreiben
IniWrite, %ziel%, %ini%, Settings, ziel ;in ini schreiben
Return
; -----------------------------------------------------------------------
getformated_time: ; wochentag und monat ermitteln
dateline = %yyyy%%MM%%dd%
FormatTime, Day,%dateline%,dddd
FormatTime,MM1,%dateline%,MMMM
Return
; ---------------------------------------------------------------------------
hide_controls:
GuiControl, Hide, combo, ;Controls verstecken
GuiControl, Hide, aufnahmeordner, ;Controls verstecken
GuiControl, Hide, andern, ;Controls verstecken
GuiControl, Hide, ziel, ;Controls verstecken
GuiControl, Hide, start, ;Controls verstecken
GuiControl, Hide, name_vorschau, ;Controls verstecken
GuiControl, Hide, g1, ;Controls verstecken
GuiControl, Hide, g2, ;Controls verstecken
GuiControl, Hide, g3, ;Controls verstecken
GuiControl, Hide, g4, ;Controls verstecken
GuiControl, Hide, abbruch, ;Controls verstecken
GuiControl, Hide, Checkbox_rot, ;Controls verstecken
GuiControl, Hide, msg, ;Controls verstecken
GuiControl, Disable, uordner, ;Controls verstecken
GuiControl, Disable, unterordner_ch, ;Controls verstecken
GuiControl, Disable, Recurse, ;Controls verstecken
GuiControl, Disable, Menu, ;Controls verstecken
Return
; ---------------------------------------------------------------------
gui_add:
Gui, Tab, %Dateiname%
Gui, Add, Picture, x20 y35 w100 h-1 vpic,
Gui, Add, edit, x130 yp w352 h140 vaktuelles -Wrap +Center +ReadOnly,
Gui, Add, Progress, x20 y+45 w460 h20 vProgresss cFF7200 BackgRoundWhite -Smooth,
Gui, Add, text, xp yp w460 h20 +0x200 +Center +BackgRoundTrans vText22, %Gesamtfortschritt%
Gui, Add, Text, x18 y+5 w365 h16, %AbbruchmitESC%
Return
; ---------------------------------------------------------------------
settime:
setter = %yyyy%%MM%%dd%%hh%%min%%ss%
; ------------------------
FileSetTime, %setter%, %FileName%, C ;setzt das Erstellungsdatum auf das der Exif-Infos
FileSetTime, %setter%, %FileName%, M ;setzt das ÄndeRungsdatum auf das der Exif-Infos
Return
; ---------------------------------------------------------------------
; Deref(string2Deref) ; dereferenzieren
; {
; global N, NN
; RegExMatch(N, "\d+", NN)
; Transform, OutputVar, Deref, %string2Deref%
; Return OutputVar
; }
Deref(string2Deref) ; dereferenzieren
{
global
If InStr(string2Deref,"%camh%")
StringReplace, string2Deref, string2Deref,% ("%camh%"), %camh%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%cama%")
StringReplace, string2Deref, string2Deref,% ("%cama%"), % FirstNumericString(cam), All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%cam%")
StringReplace, string2Deref, string2Deref,% ("%cam%"), %cam%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%yyyy%")
StringReplace, string2Deref, string2Deref,% ("%yyyy%"), %yyyy%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%yy%")
StringReplace, string2Deref, string2Deref,% ("%yy%"), %yy%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%Day%")
StringReplace, string2Deref, string2Deref,% ("%Day%"), %Day%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%MM%")
StringReplace, string2Deref, string2Deref,% ("%MM%"), %MM%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%MM1%")
StringReplace, string2Deref, string2Deref,% ("%MM1%"), %MM1%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%dd%")
StringReplace, string2Deref, string2Deref,% ("%dd%"), %dd%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%N%")
StringReplace, string2Deref, string2Deref,% ("%N%"), %N%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%min%")
StringReplace, string2Deref, string2Deref,% ("%min%"), %min%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%NN%")
{
RegExMatch(N, "\d+", NN)
StringReplace, string2Deref, string2Deref,% ("%NN%"), %NN%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
}
If InStr(string2Deref,"%ss%")
StringReplace, string2Deref, string2Deref,% ("%ss%"), %ss%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
If InStr(string2Deref,"%hh%")
StringReplace, string2Deref, string2Deref,% ("%hh%"), %hh%, All ;Zeichen in Dateinamensmaske erstzen durch erhaltene Variablen
Return string2Deref
}
; -----------------------------------------------------------------------
FirstNumericString(String)
{
Loop, Parse, string, %A_Space%
{
line := A_LoopField
if RegExMatch(A_LoopField, "\d+", Un)
Return A_LoopField
}
Return line
}
; -----------------------------------------------------------------------
pstring: ; EXIF-Informationen auswerten
Loop, 6 ;Exif_Array's leeren
Exif_Array%A_Index% =
yyyy =
yy :=
MM =
dd =
hh =
mm =
ss =
camh =
cam =
mrot =
; ------
Loop, Parse, tt, `n, `r
{
If A_LoopField Contains Camera make :
{
StringSplit, Exif_Array, A_LoopField, :, %A_Space%
camh = %Exif_Array2%
}
If A_LoopField Contains Camera model :
{
StringSplit, Exif_Array, A_LoopField, :, %A_Space%
cam = %Exif_Array2%
}
If A_LoopField Contains Date/Time :
{
StringSplit, Exif_Array, A_LoopField, :, %A_Space%
yyyy = %Exif_Array2%
yy := SubStr(Exif_Array2, 3, 2)
MM = %Exif_Array3%
StringSplit, day_hour, Exif_Array4, %A_Space%
dd = %day_hour1%
hh = %day_hour2%
min = %Exif_Array5%
ss = %Exif_Array6%
}
If A_LoopField Contains Orientation :
mrot = 1
If A_Index > 18
Break
}
Return
; -----------------------------------------------------------------------
kontrolle:
Gui, +OwnDialogs
If (!FileExist(A_Temp "\jhead.exe") or !FileExist(A_Temp "\jpegtran.exe"))
{
MsgBox, 4112, , Fehler!`njhead.exe oder/und jpegtran.exe konnten nicht gefunden werden!`nAbbruch!
ExitApp
}
IfNotExist, %Aufnahmeordner%
{
MsgBox, 64, , Der Ausgangsordner konnte nicht gefunden werden.`n%aufnahmeordner%
err = 1
Return
}
IfInString, ziel, %Aufnahmeordner%
{
MsgBox, 64, , Der Ausgangsordner und das Ziel sollten sich nicht überschneiden!
err = 1
Return
}
err =
Return
; -----------------------------------------------------------------------
; ################ Funktion ##################
calc_kb(wievielb, nachkomma = 3) ; Übergabe von Bytes, Nachkommas- Rückgabe dynamisch(bytes,kB,mB,GB)
{
Return (wievielb > 1073741824) ? Round((wievielb / 1073741824), nachkomma) " GB" : ((wievielb > 1048576) ? Round((wievielb / 1048576), nachkomma) " MB" : ((wievielb > 1024) ? Round((wievielb / 1024),nachkomma) " kB" : wievielb . " bytes"))
}
; -----------------------------------------------------------------------
append() ; Datum/Zeit zusammenstellen
{
line = `n--------------------------------------------------------------------
Return A_DD "." A_MM "." A_YYYY " " A_Hour "." A_Min " Uhr " A_Sec "sec;" line
}
; -----------------------------------------------------------------------
set_combo(alt_ziel, ziel)
{
StringReplace, OutputVar, alt_ziel, %ziel%|, %ziel%||
Return OutputVar
}
; ----------------------------Langsection-------------------------------------------
lng:
Vorlagen = Vorlagen
Abbruch = Abbruch
Start = Start
Pfade_ändern = Pfade ändern
Hilfe = Hilfe
vorschau_für_namen = Vorschau für den Namen
Zielordner_für_Bilder = Zielordner für die Bilder
Ausgangsordner_für_Bilder = Ausgangsordner für Bilder
Dateiname = Dateiname
Unterordner = Unterordner
Unterordner_Erstellen_group = Unterordner Erstellen,falls noch nicht vorhanden(siehe unten)
aktuelle_einst_group = aktuelle Einstellung für die Unterordner
unterordner_mit_ein_group = Unterordner mit einlesen(Recurse)
Ergebnis_im_group = Ergebnis im Zielordner am Beispiel Heute:
Unterordner_im_Ausgangsordner_berücksichtigen = Unterordner im Augangsordner berücksichtigen
Unterordner_im_Ziel_erstellen = Unterordner im Ziel erstellen
Select_folder_from = Von wo sollen die Bilder Verschoben/Strukturiert werden?
Select_folder_to = Wo sollen die Bilder hin Verschoben/Strukturiert werden?`nes werden ggf. Unterordner erstellt
Gesamtfortschritt = Gesamtfortschritt
Logdatei = Logdatei
msg_log = Logdatei wurde erstellt`,jetzt öffnen?
titel = Bilder nach EXIF Umbenennen und Verschieben
AbbruchmitESC = Abbruch mit ESC
Einstellungen = Einstellungen
; ------------------------------------------------------------
nur_kopieren = nur Kopieren`n(Originalstruktur bleibt erhalten)
zielordner_öffnen_wenn_fertig = Zielordner öffnen wenn fertig`n(Explorer öffnet letzten Kopier-Ordner)
Autorotation_der_bilder = Autorotation der Bilder`n(bei vorhandenen Orientierungsinformationen werden Bilder danach verlustfrei ausgerichtet)
gleichnamige_raw_kopieren = gleichnamige RAW-Kopien verarbeiten`n(werden dann in zusätzlichen Unterordner 'RAW' verschoben/kopiert)
if !eng
Return
Vorlagen = Existed
Abbruch = Cancel
Pfade_ändern = Change Paths
Start = Start
Hilfe = Help
vorschau_für_namen = Preview for Names
Zielordner_für_Bilder = Target Folder for Pictures
Ausgangsordner_für_Bilder = Source Folder for Pictures
Dateiname = Filename
Unterordner = Subfolder
Unterordner_Erstellen_group = Create subfolders, if not already present (see below)
aktuelle_einst_group = current settings for subfolders
unterordner_mit_ein_group = Sub-folders with read (Recurse)
Ergebnis_im_group = Results in the destination folder on the example today:
Unterordner_im_Ausgangsordner_berücksichtigen = Account subfolder in the Source Folder
Unterordner_im_Ziel_erstellen = Create subfolders in the target
Select_folder_from = Moved from where the images are to be structured?
Select_folder_to = Where are the pictures should be structured towards Postponed?`nIt may be created subfolders.
Gesamtfortschritt = Overall Progress
Logdatei = Logfile
msg_log = Log file is created`, open now!
titel = Pictures by EXIF rename and move
AbbruchmitESC = Cancel with ESC
Einstellungen = Settings
nur_kopieren = Copy Only`n(Leaves original structure)
zielordner_öffnen_wenn_fertig = Open Target folder when ready`n(Explorer opens last Copy Folder)
Autorotation_der_bilder = Autorotate images`n(When EXIF Orientation info exists, lossless)
gleichnamige_raw_kopieren = Process RAW Copy with same name`n(will be copied/moved to Sub-folder named "RAW")
Return
/*
todo
* überschneidung der ordner prüfen +OK
*/