Post by Meister Lampe » 20 Oct 2018, 13:05
Hallo just me!
Das Script ist nicht für den Hausgebrauch (vielleicht auch verwertbar), sondern für meine Arbeit beim Signieren von Scans, die ich von Originalen im Rahmen der Digitalisierung von Akten u.a. in unserem Archiv erstelle. Dabei haben wir unsere eigene Ordnungsschemen, deshalb auch die für außerhalb stehende Leute etwas merkwürdige Nummerierung. Vorgegeben ist dabei der Name des Bestandes, danach kommt die Nummer der Akte darin und dann die Seite innerhalb der Akte. Weil ich Variablen leider nicht dauerhaft speichern kann, um sie dann je nach Bestand zu ändern, muß diese dazu im Code vorgegeben werden. Das hatte ich wohl vergessen, Dir ebenfalls mitzuteilen. Es steht im Script oben z.B. die Zeile
um nachher in der die Signaturen für den Bestand X 12/3 generieren zu können.
Im Allgemeinen liegen die Scans schön nacheinander, sowohl die Akten, als auch die Seiten darin. Die Idee ist deshalb die, daß zuerst alle umzubenennenden Scans ein und derselben Akte markiert werden und diese dann automatisch mit der nächsthöheren Nummer von 0 an aufwärts durchgezählt werden. Aber es gibt natürlich immer mal wieder Ausnahmen, wo etwas fehlt oder anders signiert werden muß. Deshalb öffnet sich dabei eine InputBox zur Bestätigung, die die vorhergesehene Signatur
%LetzteSign% anzeigt und in die man auch direkt einen anderen Vorschlag geben kann. Soll die Zählung mit einem anderen Index als Null beginnen, so gibt man diesen mit einem Komma davor ein. Beides läßt sich auch kombinieren. Das ist der erste Teil des eigentlichen Codes:
Code: Select all
!LButton::
SendInput, +{LButton}
Clipboard := ""
SendInput, ^c
Clipwait, 1
If ErrorLevel ; abbrechen, wenn keine Dateien im Clipboard
{
MsgBox, Sie müssen mindestens eine Datei markieren!
return
}
else
BilderAuswahl := Clipboard
StrReplace(BilderAuswahl , "`n", "`n", BilderAnzahl) ; zählt die Anzahl der Zeilenvorschübe in der Variablen BilderAnzahl
VorschauAnzahl := BilderAnzahl +1
LetzteSign := SubStr("0000" . ++LetzteSign, -3) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
InputBox, BoxSign, Vorschau, "Es werden %VorschauAnzahl% Bilder umsigniert", , 225, 125, , , , ,%LetzteSign%
If ErrorLevel
{
LetzteSign := LetzteSign -1
return
}
else
IfNotInString, BoxSign, , ; Prüft, ob ein anderer Startidex durch Komma getrennt eingegeben wurde
{
LetzteSign := SubStr("0000" . BoxSign, -3) ; Setzt eine neu gewählte Signatur auf 4 Ziffern
LetzterIndex := 0 ; Setzt Index auf 0
}
else
{
StringSplit, BoxArray, BoxSign, `,
If (BoxArray1 = "")
{
LetzteSign := SubStr("0000" . ++LetzteSign, -3) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
}
else
LetzteSign := SubStr("0000" . BoxArray1, -3) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := BoxArray2
}
return
Jetzt fehlt nur noch der eigentliche Umbenennenvorgang. Mit der InputBox wurden bereits alle Parmeter dazu generiert. Mit Enter auf OK wurde sie geschlossen. Jetzt könnte eigentlich die Sache sofort beginnen, wenn die erste Datei der umzubenennenden Dateien angesteuert, aktiviert bzw. markiert wäre. Stattdessen sind immernoch
alle Dateien markiert und ich muß noch immer manuell die erste Datei ansteuern und dann ein zweites Script starten (mit
NumpadAdd):
Code: Select all
NumpadAdd::
Send, {F2}
ParamIndex := VorschauAnzahl
Clipboard := ""
SendInput, ^c
Clipwait, 1
GanzerName := Clipboard
SplitPath, GanzerName, , , Erweiterung
Loop , %ParamIndex%
{
LetzterIndex := SubStr("000" . LetzterIndex, -2) ; Setzt Index auf 1 in 2 Ziffern
LetzteNummer = %AktSign%_%LetzteSign%-%LetzterIndex%%Erweiterung%
Send, %LetzteNummer%
LetzterIndex := ++LetzterIndex
Send, {Tab}{F2}
}
return
Das ist jetzt im Prinzip die Version, mit der ich als erste ins Rennen gegangen bin (also nicht die mit dem FileMove), nur etwas optimiert, damit die Signierung unabhängig von der Einstellung der Dateinamenerweiterung (ein-/ausgeblendet) funktioniert.
Mein Traum ist jetzt, die beiden Module endlich zusammen zu fügen, damit ich sie nicht immer separat starten muß.
Ich hoffe, Dir ist jetzt klar, wohin ich will.
Viele Grüße von Meister Lampe
Hallo just me!
Das Script ist nicht für den Hausgebrauch (vielleicht auch verwertbar), sondern für meine Arbeit beim Signieren von Scans, die ich von Originalen im Rahmen der Digitalisierung von Akten u.a. in unserem Archiv erstelle. Dabei haben wir unsere eigene Ordnungsschemen, deshalb auch die für außerhalb stehende Leute etwas merkwürdige Nummerierung. Vorgegeben ist dabei der Name des Bestandes, danach kommt die Nummer der Akte darin und dann die Seite innerhalb der Akte. Weil ich Variablen leider nicht dauerhaft speichern kann, um sie dann je nach Bestand zu ändern, muß diese dazu im Code vorgegeben werden. Das hatte ich wohl vergessen, Dir ebenfalls mitzuteilen. Es steht im Script oben z.B. die Zeile
[code]AktSign := "X 12--3"[/code]
um nachher in der die Signaturen für den Bestand X 12/3 generieren zu können.
Im Allgemeinen liegen die Scans schön nacheinander, sowohl die Akten, als auch die Seiten darin. Die Idee ist deshalb die, daß zuerst alle umzubenennenden Scans ein und derselben Akte markiert werden und diese dann automatisch mit der nächsthöheren Nummer von 0 an aufwärts durchgezählt werden. Aber es gibt natürlich immer mal wieder Ausnahmen, wo etwas fehlt oder anders signiert werden muß. Deshalb öffnet sich dabei eine InputBox zur Bestätigung, die die vorhergesehene Signatur [c]%LetzteSign%[/c] anzeigt und in die man auch direkt einen anderen Vorschlag geben kann. Soll die Zählung mit einem anderen Index als Null beginnen, so gibt man diesen mit einem Komma davor ein. Beides läßt sich auch kombinieren. Das ist der erste Teil des eigentlichen Codes:
[code]!LButton::
SendInput, +{LButton}
Clipboard := ""
SendInput, ^c
Clipwait, 1
If ErrorLevel ; abbrechen, wenn keine Dateien im Clipboard
{
MsgBox, Sie müssen mindestens eine Datei markieren!
return
}
else
BilderAuswahl := Clipboard
StrReplace(BilderAuswahl , "`n", "`n", BilderAnzahl) ; zählt die Anzahl der Zeilenvorschübe in der Variablen BilderAnzahl
VorschauAnzahl := BilderAnzahl +1
LetzteSign := SubStr("0000" . ++LetzteSign, -3) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
InputBox, BoxSign, Vorschau, "Es werden %VorschauAnzahl% Bilder umsigniert", , 225, 125, , , , ,%LetzteSign%
If ErrorLevel
{
LetzteSign := LetzteSign -1
return
}
else
IfNotInString, BoxSign, , ; Prüft, ob ein anderer Startidex durch Komma getrennt eingegeben wurde
{
LetzteSign := SubStr("0000" . BoxSign, -3) ; Setzt eine neu gewählte Signatur auf 4 Ziffern
LetzterIndex := 0 ; Setzt Index auf 0
}
else
{
StringSplit, BoxArray, BoxSign, `,
If (BoxArray1 = "")
{
LetzteSign := SubStr("0000" . ++LetzteSign, -3) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
}
else
LetzteSign := SubStr("0000" . BoxArray1, -3) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := BoxArray2
}
return[/code]
Jetzt fehlt nur noch der eigentliche Umbenennenvorgang. Mit der InputBox wurden bereits alle Parmeter dazu generiert. Mit Enter auf OK wurde sie geschlossen. Jetzt könnte eigentlich die Sache sofort beginnen, wenn die erste Datei der umzubenennenden Dateien angesteuert, aktiviert bzw. markiert wäre. Stattdessen sind immernoch [i]alle[/i] Dateien markiert und ich muß noch immer manuell die erste Datei ansteuern und dann ein zweites Script starten (mit [c]NumpadAdd[/c]):
[code]NumpadAdd::
Send, {F2}
ParamIndex := VorschauAnzahl
Clipboard := ""
SendInput, ^c
Clipwait, 1
GanzerName := Clipboard
SplitPath, GanzerName, , , Erweiterung
Loop , %ParamIndex%
{
LetzterIndex := SubStr("000" . LetzterIndex, -2) ; Setzt Index auf 1 in 2 Ziffern
LetzteNummer = %AktSign%_%LetzteSign%-%LetzterIndex%%Erweiterung%
Send, %LetzteNummer%
LetzterIndex := ++LetzterIndex
Send, {Tab}{F2}
}
return[/code]
Das ist jetzt im Prinzip die Version, mit der ich als erste ins Rennen gegangen bin (also nicht die mit dem FileMove), nur etwas optimiert, damit die Signierung unabhängig von der Einstellung der Dateinamenerweiterung (ein-/ausgeblendet) funktioniert.
Mein Traum ist jetzt, die beiden Module endlich zusammen zu fügen, damit ich sie nicht immer separat starten muß.
Ich hoffe, Dir ist jetzt klar, wohin ich will.
Viele Grüße von Meister Lampe