[GastForen Programmierung/Entwicklung AppleScript Ordner m.gleicher Präfix und counter als Suffix anlegen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Ordner m.gleicher Präfix und counter als Suffix anlegen

Anonym
Beiträge gesamt: 22827

17. Nov 2005, 17:07
Beitrag # 1 von 6
Bewertung:
(1129 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,
nachdem ich so viel Hilfe hier bereits erfahren hab, hier mal ein nützliches Helferlein, dass man leicht abändern kann für seine Bedürfnisse. Das Script funktioniert folgendermaßen:
Als Programm speichern,
- Leeren Ordner auf das Programm Icon ziehen
- den gleichbleibenden Teil der in dem Ordner anzulegenden Ordnerbenamung (z.B.: Sony_HptKat_06) angeben (Das Wort "Präfix" überschreiben)
- die Anzahl der Doppelseiten angeben (ggf. die 100 überschreiben; sind nur default Werte)
- rechnen lassen
Wenn man vorher den leeren Ordner öffnet, in dem die Unterordner angelegt werden sollen, kann man sehen wie immens schnell das geht. 100 rdner in ca. 4-5 Sekunden auf nem G4 PB 1 GHz)

Das Script brauchen wir, da wir Doppelseitenweise arbeiten. Es ist immer mühsam, dann mal schnell 100 Seiten anzulegen, und diese mit ...0002, ...0004 usw. durch zu numerieren. Ach ja: mit führenden Nullen, auf 4 Stellen auffüllend zwecks der einheitlichen Optik.

So geht das ganz leicht.

Vielleicht kann noch jemand eine Einschränkung dazu tun, dass nicht mehr als max. 9.999 Seiten angegeben werden. Mein Kollege hat doch glatt versucht 1 Millio anzulegen. Bei knapp 50.000 isser dann ausgestiegen - der Rechner.

Interessant wäre es auch eine Variante für die entsprechende Benamung von files innerhalb eines Ordners einfach vom ersten bis zum letzten zu haben, wobei man dann sinnvollweise prüfen lassen müsste, ob es schon Daten dieser Struktur in dem Ordner gibt und dann mit der nächst höheren Zahl (diesmal in Einzelschritten) weitermacht.

Gruß
Gerd

on open Ordner
 tell application "Finder"
  repeat with i from 1 to length of Ordner
   if kind of (item i of Ordner) is "Ordner" then
    set t to alias ((item i of Ordner) as string)
    try
     repeat
      set pref to text returned of (display dialog "Bitte das Präfix für die Ordnernamen eingeben." default answer "Präfix" buttons {"1/2 | Weiter"} default button 1 with icon 1 giving up after 350)
      exit repeat
     end repeat
    end try
    try
     repeat
      set anz to text returned of (display dialog "Bitte die Anzahl der Gesamtseiten eingeben." default answer "100" buttons {"2/2 | Weiter"} default button 1 with icon 1 giving up after 350) as integer
      exit repeat
     end repeat
    end try
    set bestat to button returned of (display dialog "Bereit zum Anlegen von " & ((anz / 2) as integer) & " Seiten-Ordnern im Auftragsordner '" & (t as string) & "'?" buttons {"Abbrechen", "Ok"} default button 2 with icon 1 giving up after 350)
    if bestat is "Ok" then
     set langeofzahl to "4"
     repeat with i from 2 to anz by 2
      if i is anz then
       if i mod 2 is 0 then set einsdazu to ""
      else
       set einsdazu to "–" & my fuehrendeNullen((i + 1), langeofzahl)
      end if
      try
       make new folder at t with properties {name:pref & (my fuehrendeNullen(i, langeofzahl))}
      end try
     end repeat
    end if
   end if
  end repeat
 end tell
end open

on run
 display dialog "Dieses Programm legt Seiten-Unterordner in einem Auftragsordner an. Einfach den Ordner, in dem die Ordner erzeugt werden sollen, auf das Programm ziehen..." buttons {"Ok"} default button 1 with icon 1 giving up after 350
end run

on fuehrendeNullen(Ziffer, stellen)
 set genullt to (Ziffer) as text
 repeat until (length of (genullt as text)) ? stellen
  set genullt to "0" & genullt
 end repeat
 return genullt
end fuehrendeNullen
X

Ordner m.gleicher Präfix und counter als Suffix anlegen

Hans Haesler
  
Beiträge gesamt: 5822

18. Nov 2005, 10:44
Beitrag # 2 von 6
Beitrag ID: #420400
Bewertung:
(1129 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerd,

danke für das Script. Aber ... es gibt einiges zu verbessern ...

1. Der Klick auf "Abbrechen" beendet die Ausführung nicht. Die Ordner werden gleichwohl erzeugt.
Korrekt wäre "Abbruch". Aber weil man nicht sicher sein kann, dass der Anwender mit einer deutschen
Mac-OS-Umgebung unterwegs ist, muss dieser Button in den Test aufgenommen werden.
2. Bei den zwei ersten 'try'-Wickeln fehlt der 'on error'-Teil. Beim Präfix-Dialog ist das 'try' überflüssig.
Und was sollen die Endlos-Repeat-Schleifen bezwecken?
3. Es fehlt ein Test, welcher prüft, ob die Anzahl Gesamtseiten eine Ganzzahl ist. Okay, hier greift der
'try'-Wickel. Aber bei einer falschen Eingabe läuft das Script weiter bis der nächste Dialog nicht gezeigt
werden kann, weil die Variable 'anz' nicht definiert ist.
4. Die grossen 'giving-up-after'-Werte von 350 sorgen dafür, dass die Dialoge nach 350 Sekunden
geschlossen werden. Falls der Anwender einen Ordner auf das Droplet zieht und dann ein langes
Telefonat startet, ohne sich um die Dialoge zu kümmern, läuft das Script weiter und die Ordner werden
mit den Vorgabewerten erzeugt.
5. Bei einer ungeraden Angabe von "Seitenzahl" wird ein Ordner zuwenig erzeugt. Vielleicht sollten
nur gerade Zahlen akzeptiert werden.
6. Doppelpunkte im Namen müssen entdeckt und gemeldet werden. Sonst würden die Ordner nicht
erzeugt und der unbedarfte Anwender wüsste nicht warum. Ich würde sogar den Bruchstrich verbieten.
7. Die führenden Nullen werden viel zu umständlich erzeugt. Wenn die Anzahl Stellen immer gleich
sind, kann man den Wert "hard" im Script einsetzen. Wenn die Anzahl Stellen der Eingabe angepasst
werden soll, gibt es eine dynamische Lösung mit Variablen.
8. Der ganze 'on open'-Handler ist in einem einzigen tell-app-Finder-Block. Das sollte vermieden
werden, weil der Finder langsam ist. Wenn möglich nur Einzeilen-Befehle: 'tell app "Finder" to ...'
9. Wenn im Auftragsordner schon ein Ordner existiert, sollte der Anwender darauf aufmerksam gemacht
werden. Das obenstehende Script meldet nichts.
10. Der Button "OK" sollte zwei Grossbuchstaben aufweisen. "Ok" ist nicht korrekt.
11. Am Schluss fehlt eine Meldung, dass die Ausführung beendet ist.

Nachstehend meine Version. Auch hier gibt es Endlos-Schleifen, aber diese werden dazu benutzt, dem Anwender
eine Fehleingabe zu melden und dann – benutzerfreundlich – den Dialog erneut anzuzeigen. Die Schleife wird
verlassen, sobald die Eingabe korrekt ist.

Ein leeres Präfix wird durchgelassen. Kann sein, dass mal Ordner nur mit Ziffern benannt werden sollen.
---
on open droppedItems
   set itemOne to (item 1 of droppedItems) as Unicode text
   if itemOne ends with ":" then
      set okay to false
      repeat while okay is false
         set pref to text returned of (display dialog ¬
            "Bitte das Präfix für die Ordnernamen eingeben." default answer "Präfix" buttons ¬
            {"1/2 | Weiter"} default button 1 with icon 1)
         set okay to true
         if pref contains ":" or pref 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
      set okay to false
      repeat while okay is false
         set anz to text returned of (display dialog ¬
            "Bitte die Anzahl der Gesamtseiten eingeben." default answer "100" buttons ¬
            {"2/2 | Weiter"} default button 1 with icon 1)
         set okay to true
         if anz is not "" then
            set nDigits to count of anz
            if nDigits is greater than 4 then
               display dialog "Maximale Seitenzahl ist 9999." buttons "OK" default button 1 with icon 2
               set okay to false
            else
               repeat with i from 1 to nDigits
                  if character i of anz is not in "0123456789" then
                     display dialog "Nur ganze Zahlen." buttons "OK" default button 1 with icon 2
                     set okay to false
                     exit repeat
                  end if
               end repeat
            end if
            if okay then
               set anz to anz as integer
               if anz mod 2 is not 0 then set anz to anz + 1
            end if
         else
            display dialog "Die Eingabe für »Seitenzahl« ist leer." buttons "OK" default button 1 with icon 2
            set okay to false
         end if
      end repeat
      set bestat to button returned of (display dialog ¬
         "Bereit zum Anlegen von " & ((anz / 2) as integer) & " Seiten-Ordnern im Auftragsordner »" & itemOne & "«?" buttons ¬
         {"Abbruch", "OK"} default button 2 with icon 1)
      if bestat is "OK" then
         repeat with i from 2 to anz by 2
            set newName to pref & text -4 thru -1 of ("000" & i)
            try
               tell application "Finder" to make new folder at folder itemOne with properties {name:newName}
            on error
               display dialog "Der Ordner " & newName & " existiert schon." buttons "OK" default button 1 with icon 0
               error number -128
            end try
         end repeat
      else
         error number -128
      end if
   end if
   display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end open

on run
   display dialog "Dieses Programm legt Seiten-Unterordner in einem Auftragsordner an. Einfach den Ordner, in dem die Ordner erzeugt werden sollen, auf das Icon dieses Droplets  ziehen..." buttons "OK" default button 1 with icon 1
end run

---
Die obere Limite von 9999 habe ich eingebaut. Deinen Schluss-Satz verstehe ich leider nicht. Vielleicht
kannst Du genauere Angaben machen, was das Script tun sollte.

Gruss, Hans


als Antwort auf: [#420399]

Ordner m.gleicher Präfix und counter als Suffix anlegen

Anonym
Beiträge gesamt: 22827

21. Nov 2005, 10:47
Beitrag # 3 von 6
Beitrag ID: #420401
Bewertung:
(1128 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
:shock:
Au backe! :oops:

Bei hat's zwar soweit seinen Zweck erfüllt, aber so, wie Du das script korrigiert hast, macht's natürlich mehr Sinn. Das mit der Schleife hat sich so entwickelt und ich hab sie dann nicht mehr so recht raus bekommen. Echt 1a!

Ich hoffe halt mal, es kann auch anderen ein kleines helferlein sein.

Vielen Dank und herzliche Grüße
Gerd


als Antwort auf: [#420399]

Ordner m.gleicher Präfix und counter als Suffix anlegen

Anonym
Beiträge gesamt: 22827

12. Dez 2005, 12:10
Beitrag # 4 von 6
Beitrag ID: #420402
Bewertung:
(1129 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen und ganz besonders Hans!
Wieder mal ich... Es geht um eine kleine Ergänzung des "Odner erstellen Scripts":
Wir haben neuerdings (häufiger werdend) den Fall, dass wir fest definierte Unterordner benötigen. Kann man das möglichst flexibel ergänzen??
Beispiel:
Präfix: HW_HL_
Counter: 240 Seiten (=> 120 Ordner werden angelegt)

In jedem Ordner sollen im aktuellen Fall 2 Unterordner liegen. 1 x TD und 1 x TF benannt.

Völlig genügend wäre es, wenn ich Zeilen im Code ergänzen könnte, bei der jede Ergänzung für einen Ordner steht, dessen Name ich dann in den Code schreiben könnte. Je nach Wunsch kann dann eine beliebige Anzahl von Unterordnern mit dem Hauptordner angelegt werden.
Merci, Gerd

Hier ist das Script, dass ich für die Ordner von Hans bekommen hab:
on open droppedItems
 set itemOne to (item 1 of droppedItems) as Unicode text
 if itemOne ends with ":" then
  set okay to false
  repeat while okay is false
   set pref to text returned of (display dialog ¬
    "Bitte das Präfix für die Ordnernamen eingeben." default answer "Präfix" buttons ¬
    {"1/2 | Weiter"} default button 1 with icon 1)
   set okay to true
   if pref contains ":" or pref 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
  set okay to false
  repeat while okay is false
   set anz to text returned of (display dialog ¬
    "Bitte die Anzahl der Gesamtseiten eingeben." default answer "100" buttons ¬
    {"2/2 | Weiter"} default button 1 with icon 1)
   set okay to true
   if anz is not "" then
    set nDigits to count of anz
    if nDigits is greater than 4 then
     display dialog "Maximale Seitenzahl ist 9999." buttons "OK" default button 1 with icon 2
     set okay to false
    else
     repeat with i from 1 to nDigits
      if character i of anz is not in "0123456789" then
       display dialog "Nur ganze Zahlen." buttons "OK" default button 1 with icon 2
       set okay to false
       exit repeat
      end if
     end repeat
    end if
    if okay then
     set anz to anz as integer
     if anz mod 2 is not 0 then set anz to anz + 1
    end if
   else
    display dialog "Die Eingabe für »Seitenzahl« ist leer." buttons "OK" default button 1 with icon 2
    set okay to false
   end if
  end repeat
  set bestat to button returned of (display dialog ¬
   "Bereit zum Anlegen von " & ((anz / 2) as integer) & " Seiten-Ordnern im Auftragsordner »" & itemOne & "«?" buttons ¬
   {"Abbruch", "OK"} default button 2 with icon 1)
  if bestat is "OK" then
   repeat with i from 2 to anz by 2
    set newName to pref & text -4 thru -1 of ("000" & i)
    try
-- hier an dieser Stelle hab ich versucht, das Problem mit den Unterordnern hin zu bekommen; hat leider nicht funktioniert, deshalb hab ichs wieder entfernt.
     tell application "Finder" to make new folder at folder itemOne with properties {name:newName}
    on error
     display dialog "Der Ordner " & newName & " existiert schon." buttons "OK" default button 1 with icon 0
     error number -128
    end try
   end repeat
  else
   error number -128
  end if
 end if
 display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end open

on run
 display dialog "Dieses Programm legt Seiten-Unterordner in einem Auftragsordner an. Einfach den Ordner, in dem die Ordner erzeugt werden sollen, auf das Icon dieses Droplets ziehen..." buttons "OK" default button 1 with icon 1
end run


als Antwort auf: [#420399]

Ordner m.gleicher Präfix und counter als Suffix anlegen

Hans Haesler
  
Beiträge gesamt: 5822

12. Dez 2005, 14:47
Beitrag # 5 von 6
Beitrag ID: #420403
Bewertung:
(1129 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerd,

Dein Eingriff war zwei Zeilen zu früh. Der Ordner muss existieren, bevor darin die Unterordner erzeugt werden können.
---
            try
               tell application "Finder" to make new folder at folder itemOne with properties {name:newName}
               tell application "Finder" to make new folder at folder (itemOne & newName) with properties {name:"TD"}
               tell application "Finder" to make new folder at folder (itemOne & newName) with properties {name:"TF"}
            on error
               display dialog "Der Ordner " & newName & " existiert schon." buttons "OK" default button 1 with icon 0
               error number -128
            end try

---
Gruss, Hans


als Antwort auf: [#420399]

Ordner m.gleicher Präfix und counter als Suffix anlegen

Anonym
Beiträge gesamt: 22827

12. Dez 2005, 15:01
Beitrag # 6 von 6
Beitrag ID: #420404
Bewertung:
(1128 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
grade eben hab ich es auch gecheckt!
Merci aber. Bin allerdings schon mal froh, dass ich es auch selbst hinbekommen hab.

Viele Grüße
Gerd


als Antwort auf: [#420399]
X