Forenindex » Programmierung/Entwicklung » AppleScript » Dokumente umbennen (Präfix + Nummerierung)

Dokumente umbennen (Präfix + Nummerierung)

Anonym
Beiträge gesamt: 22827

24. Nov 2005, 14:40
Bewertung:

gelesen: 3120

Beitrag als Lesezeichen
Hallo zusammen,
hat jemand zufällig ein Script, das folgendes macht?:
- Man zieht einen Ordner mit Dokumenten (z.B. Bilder oder Xpress-Dateien) auf ein Droplet
- Das somit gestartete Script fragt nach der Präfix und beginnt die Dokumente umzubenennen und nach der Präfix einfach eine laufende Nummer (4-stellig mit führenden Nullen) anzuhängen. Vorher ist eine Prüfung mit der Suche nach der höchsten Nummer notwendig, mit dem entsprechendem Datenmuster. Letzteres muss nicht unbedingt sein. Der User kann ja einfach mal vorher prüfen, ob die Daten soweit passen. Wir müssen oft ganze Bildordner auf diese Weise umbennen. Das ist eine Sch.... Arbeit.

Viele Grüße
Gerd

Dokumente umbennen (Präfix + Nummerierung)

Hans Haesler
  
Beiträge gesamt: 5826

24. Nov 2005, 17:28
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Gerd,

solche Scripts habe ich schon einige entwickelt. Aber auch
bei dieser Aufgabe ist es wichtig, genaue Angaben zu bekommen.

1) Wie sehen die Namen der Dateien aus?
2) Sind Suffixe vorhanden?
3) Wie sollen die ergänzten Namen aussehen?

Bitte sende mir ein paar Beispiele.

Gruss, Hans

Dokumente umbennen (Präfix + Nummerierung)

Anonym
Beiträge gesamt: 22827

25. Nov 2005, 10:29
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Hans,
zum Beispiel von:
DSCF1535.JPG
DSCF1536.JPG
DSCF1537.JPG
DSCF1538.JPG

in
Li_920_0015_b01.eps
Li_920_0015_b02.eps
Li_920_0015_b03.eps
Li_920_0015_b04.eps

Ist aber anders, als mir erklärt wurde.
Was das erste heisst, weiss ich nicht (LI_920_). Das muss einfach eingegeben werden können.

Der zweite Teil ist die 4-stellige Seitenzahl mit führenden Nullen (Das wurde mir verschwiegen; vielleicht hilft der Code vom Ordner umbenamen???) Muss aber nicht unbedingt sein; Kann auch vorne mit eingegeben werden.


Das nächste ist das b (Heisst einfach "bild")
Dann kommt die Numerierung. Da die sich dafür entschiedenen haben, die Bilder nicht alle in einem Zug durchnumerieren zu zlassen, sondern auf Seiteneben, wird es nie mehr als 2-stellig sein. Auch hier braucht man die führende Null.

Geht das??

Viele Grüße
Gerd

Dokumente umbennen (Präfix + Nummerierung)

Hans Haesler
  
Beiträge gesamt: 5826

25. Nov 2005, 11:19
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Gerd,

ja, das geht. Ist aber sehr ... abenteuerlich! Denn mit dem Ändern des Suffixes wird aus
einer JPEG-Datei noch lange nicht ein EPS ...

Wenn ich alles richtig verstanden habe, dann hättest Du gerne ein Droplet. Sobald ein
Ordner darauf gezogen wird, dann sollte ein Dialog dass Eingeben des Präfixes ermöglichen.

Und dann geht das Script durch die Namen der Dateien, zieht die Ziffern der
Positionen 5 und 6 aus und setzt den neuen Namen zusammen und benennt die Datei um.

Fragen: Ist dies eine einmalige Aktion? Oder kommen später neue Dateien in den Ordner?
Und muss dann die höchste Zahl festgestellt werden?

Gruss, Hans

Dokumente umbennen (Präfix + Nummerierung)

Anonym
Beiträge gesamt: 22827

25. Nov 2005, 13:37
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Hans,
hab nicht auf die Endung geachtet. Vor der Umbenamung werden die Daten von jpg auf eps gewandelt. Richtig wäre gewesen:
zum Beispiel von:
DSCF1535.eps
DSCF1536.eps
DSCF1537.eps
DSCF1538.eps

in
Li_920_0015_b01.eps
Li_920_0015_b02.eps
Li_920_0015_b03.eps
Li_920_0015_b04.eps

Ein Dropelt wäre wohl am sinnvollsten. Die Benamung wird nur 1 x durchgeführt. Also ist keine Überprüfung notwendig. Sollte nachträglich was kommen, wird zumindest das per Hand gemacht.

Viele Grüße
Gerd

Dokumente umbennen (Präfix + Nummerierung)

Hans Haesler
  
Beiträge gesamt: 5826

25. Nov 2005, 23:36
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Gerd,

welche Enttäuschung! ;-) Keine Überprüfung notwendig?!? Der bisher höchste vergebene Numerierungswert
muss nicht festgestellt werden? So ist die Aufgabe natürlich viel weniger anspruchsvoll ...

Das folgende Script – als Programm gesichert – ergibt ein Droplet, welches nur das erste Objekt behandelt.
Es wird bewusst auf eine Wiederholungsschleife durch mehrere Ordner verzichtet. Diese müssten sortiert
und der aktuelle Name angezeigt werden. Der Anwender dürfte die Präfixe nicht verwechseln.

Ganz verzichtet wird auf eine rekursive Behandlung, welche ein Gemisch von Ordnern und Dateien zulassen
würde. Aber bei der vorliegenden Aufgabe macht dies keinen Sinn.
---
-- das "alte" Präfix (kann hier geändert werden)
property oldPref : "DSCF"

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
   display dialog "Einen Ordner, welcher die Bild-Dateien
enthält, auf das Icon dieses Droplets ziehen." buttons "OK" default button 1 with icon 0
end run

-- der 'open' Handler, welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
   set ctr to 0
   --die Zeichen des alten Präfixes zählen
   set nChars to count oldPref
   -- den Doppelpunkt als Texttrenner definieren, damit der Name der Dateien ausgezogen werden kann
   set AppleScript's text item delimiters to {":"}
   -- der Pfad des ersten Objekts wird in einen String verwandelt
   set objectPath to item 1 of allObjects as string
   -- wenn der Pfad mit einem Doppelpunkt endet, ist es ein Ordner
   if objectPath ends with ":" then
      -- das Präfix verlangen
      set okay to false
      repeat while okay is false
         set aPref to text returned of (display dialog "Präfix eingeben" default answer "Li_920_")
         set okay to true
         if aPref contains ":" or aPref contains "/" then
            display dialog "Ordnernamen dürfen keinen Doppelpunkt enthalten (und Bruchstriche sollten vermieden werden)." buttons ¬
               "OK" default button 1 with icon 2
            set okay to false
         end if
      end repeat
      -- den Dateizähler initialisieren
      set fCtr to 0
      -- die Liste der Objekte wird erstellt (ohne unsichtbare Dateien)
      set contentsList to list folder objectPath without invisibles
      -- Wiederholungsschleife durch die Liste der Namen
      repeat with fileName in contentsList
         -- wenn der aktuelle Name mit dem alten Präfix beginnt ...
         if fileName starts with oldPref then
            -- den Pfad der aktuellen Datei zusammensetzen
            set aFile to (objectPath & fileName)
            -- die Variable 'newName' als leer definieren
            set newName to ""
            -- den Dateizähler hochzählen
            set fCtr to fCtr + 1
            -- den Wert mit führender Null versehen
            set varNum to text -2 thru -1 of ("0" & fCtr)
            try
               -- die fixe Nummer ausziehen
               set fixNum to text nChars thru (nChars + 1) of fileName
               -- das Suffix speichern
               set aSuf to text -4 thru -1 of fileName
               -- den neuen Namen zusammensetzen
               set newName to aPref & "00" & fixNum & "_b" & varNum & aSuf
            end try
            -- wenn alles geklappt hat, dann ...
            if newName is not "" then
               try
                  -- ... versuchen, die aktuelle Datei umzubenennen
                  tell application "Finder" to set name of file aFile to newName
               on error
                  -- wenn dies nicht möglich ist, den Wert des Zählers erhöhen
                  set ctr to ctr + 1
               end try
            end if
         end if
      end repeat
   end if
   -- den Textelement-Trenner wieder auf den Vorgabe-Wert (= leerer String) zurücksetzen
   set AppleScript's text item delimiters to {""}
   -- wenn der Wert der Zählers 'ctr' Null ist, einen Dialog zeigen: die Script-Aktion ist fertig
   -- sonst anzeigen, wieviele Dateien nicht umbenannt werden konnten
   if ctr is 0 then
      display dialog "Fertig." buttons "OK" default button 1 giving up after 1
   else
      display dialog "Nicht umbenannte Dateien: " & ctr & "

(Konflikt: identische Namen)." buttons "OK" default button 1 with icon 2
   end if
end open

---
Es werden nur Dateien, welche mit "DSCF" beginnen, berücksichtigt. Die Suffixe werden nicht geprüft. Es werden
die letzten drei Zeichen des Namens dafür eingesetzt

Falls es besser wäre, mehrere Ordner aufs Mal abzuarbeiten, wäre dies ohne grossen Aufwand möglich.
Ich müsste aber konkrete Angaben haben, wie die Präfixe vergeben werden sollen und wie die Numerierung
angebracht werden muss.

Gruss, Hans

Dokumente umbennen (Präfix + Nummerierung)

Anonym
Beiträge gesamt: 22827

28. Nov 2005, 18:39
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Hans,
hab schon mal getestet und experimentiert. Ich finde nicht heraus, wie Du den Teil zwischen dem "_b" und der Präfix erzeugst. Das will die Kollegin mit in die Präfix schreiben.

Viele Grüße
Gerd

Dokumente umbennen (Präfix + Nummerierung)

Hans Haesler
  
Beiträge gesamt: 5826

29. Nov 2005, 00:06
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Gerd,

das Script sollte die Ziffern der Positionen 5 und 6 aus des alten Dateinamens ausziehen. Die Variable
'nChars' ist die Anzahl der Zeichen des "alten" Präfixes, welches mit "DSCF" definiert ist. Aber oben
im geposteten Code habe ich beim Einsetzen der Variablen nicht aufgepasst. Anstatt ...
Code
[b]set fixNum [b]to text nChars [b]thru (nChars + 1) [b]of fileName 

... muss der Befehl so lauten:
Code
[b]set fixNum [b]to text (nChars + 1) [b]thru (nChars + 2) [b]of fileName 

Wenn aber diese beiden Ziffern nicht per Script dem alten Dateinamen entnommen werden sollen, sondern
im Präfix-Dialog eingetippt werden müssen, dann muss man den Default-Text des Dialogs ändern, die Zeichen
des alten Präfixes müssen nicht gezählt und der neue Name kann einfacher zusammengesetzt werden.

Hier ist das gesamte, entsprechend korrigierte Script:
---
-- das "alte" Präfix (kann hier geändert werden)
property oldPref : "DSCF"

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
   display dialog "Einen Ordner, welcher die Bild-Dateien
enthält, auf das Icon dieses Droplets ziehen." buttons "OK" default button 1 with icon 0
end run

-- der 'open' Handler, welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
   set ctr to 0
   -- den Doppelpunkt als Texttrenner definieren, damit der Name der Dateien ausgezogen werden kann
   set AppleScript's text item delimiters to {":"}
   -- der Pfad des ersten Objekts wird in einen String verwandelt
   set objectPath to item 1 of allObjects as string
   -- wenn der Pfad mit einem Doppelpunkt endet, ist es ein Ordner
   if objectPath ends with ":" then
      -- das Präfix verlangen
      set okay to false
      repeat while okay is false
         set aPref to text returned of (display dialog "Präfix eingeben" default answer "Li_920_0015")
         set okay to true
         if aPref contains ":" or aPref contains "/" then
            display dialog "Ordnernamen dürfen keinen Doppelpunkt enthalten (und Bruchstriche sollten vermieden werden)." buttons ¬
               "OK" default button 1 with icon 2
            set okay to false
         end if
      end repeat
      -- den Dateizähler initialisieren
      set fCtr to 0
      -- die Liste der Objekte wird erstellt (ohne unsichtbare Dateien)
      set contentsList to list folder objectPath without invisibles
      -- Wiederholungsschleife durch die Liste der Namen
      repeat with fileName in contentsList
         -- wenn der aktuelle Name mit dem alten Präfix beginnt ...
         if fileName starts with oldPref then
            -- den Pfad der aktuellen Datei zusammensetzen
            set aFile to (objectPath & fileName)
            -- die Variable 'newName' als leer definieren
            set newName to ""
            -- den Dateizähler hochzählen
            set fCtr to fCtr + 1
            -- den Wert mit führender Null versehen
            set varNum to text -2 thru -1 of ("0" & fCtr)
            try
               -- das Suffix speichern
               set aSuf to text -4 thru -1 of fileName
               -- den neuen Namen zusammensetzen
               set newName to aPref & "_b" & varNum & aSuf
            end try
            -- wenn alles geklappt hat, dann ...
            if newName is not "" then
               try
                  -- ... versuchen, die aktuelle Datei umzubenennen
                  tell application "Finder" to set name of file aFile to newName
               on error
                  -- wenn dies nicht möglich ist, den Wert des Zählers erhöhen
                  set ctr to ctr + 1
               end try
            end if
         end if
      end repeat
   end if
   -- den Textelement-Trenner wieder auf den Vorgabe-Wert (= leerer String) zurücksetzen
   set AppleScript's text item delimiters to {""}
   -- wenn der Wert der Zählers 'ctr' Null ist, einen Dialog zeigen: die Script-Aktion ist fertig
   -- sonst anzeigen, wieviele Dateien nicht umbenannt werden konnten
   if ctr is 0 then
      display dialog "Fertig." buttons "OK" default button 1 giving up after 1
   else
      display dialog "Nicht umbenannte Dateien: " & ctr & "

(Konflikt: identische Namen)." buttons "OK" default button 1 with icon 2
   end if
end open

---
Gruss, Hans

Dokumente umbennen (Präfix + Nummerierung)

Anonym
Beiträge gesamt: 22827

2. Dez 2005, 09:17
Bewertung:

gelesen: 3119

Beitrag als Lesezeichen
Hallo Hans,
t'schuldigung, dass ich mich jetzt erst melde.
Vielen Dank für die Infos und die änderungen. Ich werd versuchen, mir das am Wochenende zu Gemüte zu führen. Bin im Moment auch noch Urlaubsvertretung und das in der "heissen" Phase...

Viele Grüsse in die Schweiz
Gerd