Forenindex » Programmierung/Entwicklung » AppleScript » ordnersysteme anlegen

ordnersysteme anlegen

Anonym
Beiträge gesamt: 22827

14. Sep 2004, 08:15
Bewertung:

gelesen: 3048

Beitrag als Lesezeichen
hallo hans & friends,

fuer die produktion von tageszeitungen legen wir immer tagesordner-systeme an in denen sich die aktuellen bilder und grafiken befinden. diese legen wir "von hand" auf vorrat an. geht doch bestimmt (vielleicht) auch mit apfel-script.

der name des grundordners enthaelt immer das tagesdatum und produktnamen. z.b. 15.09.04_az. das ganze hat dann einen rammel von immer gleichen unterordnern mit kurzen bezeichnungen.

schoen waere es, wenn das script z.b. anzahl der zu machenden ordnersysteme  und den produkt namen (den moeglichen produkten muesste es dann die passenden unterordner zuordnen)  abfragt .

vielleicht einfacher, wenn ein droplet den namen eines bestehenden grundordnersystems aendert und als kopie abgelegt ?


auf wunsch sende ich liebend gern muster zu.

hoffentlich hat jetzt irgendjemand verstanden was ich sagen will¿ :)

cu

hans

ordnersysteme anlegen

Hans Haesler
  
Beiträge gesamt: 5805

14. Sep 2004, 11:25
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
Hallo Hans Gerd,

bei uns hat jede Zeitschrift auf dem Bildserver-Volume einen Musterordner. Jener von "L'illustré"
heisst zum Beispiel "ILXX". Wenn die Bilder für eine neue Woche eintreffen, dann wird dieser
Ordner mit Befehl-D kopiert und manuell umbenannt in, z.B., "IL40". Der Ordner enthält
leere Unterordner.

Beim täglichen Anlegen von Ordnersystemen könnte man schon ein Script einsetzen.
Am einfachsten wäre natürlich das Kopieren und Umbenennen von existierenden Ordnern.

Wenn Du mir die (leeren) Ordnersysteme zustellst, werde ich versuchen, etwas zu entwickeln.
Unter welchem Mac OS sollte dies funktionieren?

Hans Haesler <[email protected]>

ordnersysteme anlegen

Hans Haesler
  
Beiträge gesamt: 5805

14. Sep 2004, 19:51
Bewertung:

gelesen: 3046

Beitrag als Lesezeichen
Hallo Hans,

wie man das aktuelle Datum per AppleScript feststellt, wird im Thema "via applescript aktuelle zeit+datum in den dateinamen fügen" erklärt: http://www.page-online.de/page/forum/viewthread/2321

Deshalb hier nur das (Mac-OS-9)-Script, ohne grosse Erklärungen. Nur soviel: Es wird nur ein Minimum an Error-handling ausgeführt. Das Droplet ignoriert Objekte, welche keine Ordner sind. Der Name muss mindestens 9 Zeichen aufweisen. Sonst geschieht nichts. Wenn ein Objekt (oder mehrere) auf das Droplet gezogen wird, setzt das Script das aktuelle Datum (in Kurzform) zusammen. Zum Beispiel "14.09.04". Dieses Datum wird im Dialog zum Bestätigen oder Abändern angeboten. Die Eingabe des Anwenders wird nur zurückgewiesen, wenn sie leer ist. Ansonsten ist er verantwortlich für die Formatierung. Ganz nach dem Motto: "Garbage in, garbage out!" ("Abfall hinein, Abfall raus") &#133;

Es wäre zwar möglich, zu prüfen, ob die Eingabe ein gültiges Datum ist. Aber der Code würde viele Zeilen umfassen. Für die erste Version lasse ich die Prüfung weg. Kann sie aber bei Bedarf nachliefern.

Das Script dupliziert die Ordner, welche einen Default-Namen wie "xx.xx.xx_AZ" haben und benennt das neue Objekt. Dabei werden die ersten acht Zeichen durch das gewünschte Datum ersetzt.
---
on run
  display dialog "Bitte den zu kopierenden Ordner
auf das Icon dieses Droplets ziehen." buttons "OK" default button 1 with icon 1
end run

on open itemList
  set curdate to (current date)
  copy curdate to tempDate
  set month of tempDate to January
  set dd to text -2 thru -1 of ("0" & (day of curdate))
  set mm to text -2 thru -1 of ("0" & ((curdate - tempDate) div 2500000) + 1)
  set yy to text -2 thru -1 of ("" & (year of curdate))
  set compDate to (dd & "." & mm & "." & yy)
 
  set okay to 0
  repeat while okay = 0
    set actDate to text returned of (display dialog "Das Datum für den Ordner ändern oder bestätigen:" default answer compDate)
    if actDate is not "" then
      set okay to 1
    else
      display dialog "Die Eingabe ist leer.

Neuer Versuch?" with icon 2
    end if
  end repeat
  set AppleScript's text item delimiters to {":"}
  repeat with anObject in itemList
    set folderPath to anObject as string
    if folderPath ends with ":" then
      set containerPath to text items 1 thru -3 of folderPath
      set oldName to text item -2 of folderPath
      if (count of oldName) > 8 then
        set restName to text 9 thru -1 of oldName
        set newName to actDate & restName
        try
          tell application "Finder" to set newFolder to (duplicate folder folderPath)
          tell application "Finder" to set name of newFolder to newName
        end try
      end if
    end if
  end repeat
  set AppleScript's text item delimiters to {":"}
end open
---
Diesen Code, als Applikation (= Droplet) gesichert, stelle ich Dir per E-mail zu.

Hans Haesler <[email protected]>

ordnersysteme anlegen

Anonym
Beiträge gesamt: 22827

15. Sep 2004, 10:58
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
hallo hans,

die von dir beschriebene funktionsweise tut! :)

der hit waere jetzt, wenn das script ausgehend vom eingegebenen datum bis zum 31ten tag hochzaehlend, neue ordner anlegen wuerde.

hui, dann staunt der laie (ich) und der scripter schuettelt sich ;-)
ich wusste doch, das ich es nicht verstaendlich erklaert habe &#133;

viele, viele gruesse

cu

hans

ordnersysteme anlegen

Hans Haesler
  
Beiträge gesamt: 5805

15. Sep 2004, 12:02
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
Hallo Hans,

und wenn der Monat nur 30 Tage hat? Ich nehme an, dass man diese Fälle berücksichtigen sollte. Ist nicht
so schwierig, dies einzubauen. Eine kleine Knacknuss bildet der Februar (Schaltjahr), sollte aber machbar sein.

Im Moment bin ich immer noch sehr beschäftigt mit dem Layout der französischen Version unseres
GaultMillau-Restaurant-Führers. Deshalb kann ich das Script nicht vor heute Abend umbauen.

Hans Haesler <[email protected]>

ordnersysteme anlegen

Hans Haesler
  
Beiträge gesamt: 5805

15. Sep 2004, 20:53
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
Hallo Hans,

ja, im ersten Posting war nicht ersichtlich, dass von jedem Ordner eine Serie angelegt werden soll.
Hier nun das ausgebaute Script, welches gezwungenermassen etwas mehr Error-Handling betreffend der
Eingabe enthält: Ist der Starttag nicht grösser als die Gesamtzahl der Tage eines Monats?
Zählen Tag, Monat, Jahr insgesamt sechs Stellen? Ist jedes Zeichen eine Ziffer?

Das folgende Script als Droplet gesichert, erwartet, dass ein (oder mehrere) Ordner, dessen Name
mindestens neun Zeichen zählt, auf sein Icon gezogen wird. Aus Platzgründen stehen im Code keine
Kommentarzeilen. Wer etwas davon nicht versteht, darf sich ruhig bei mir melden.
---
on run
  display dialog "Bitte den zu kopierenden Ordner
auf das Icon dieses Droplets ziehen." buttons "OK" default button 1 with icon 1
end run

on open itemList
  set curdate to (current date)
  copy curdate to tempDate
  set month of tempDate to January
  set dd to text -2 thru -1 of ("0" & (day of curdate))
  set mm to text -2 thru -1 of ("0" & ((curdate - tempDate) div 2500000) + 1)
  set yy to text -2 thru -1 of ("" & (year of curdate))
  set actDate to (dd & "." & mm & "." & yy)
 
  set okay to 0
  repeat while okay = 0
    set actDate to text returned of (display dialog "Das Datum für den Ordner ändern oder bestätigen:" default answer actDate)
    try
      set dd to (text 1 thru 2 of actDate)
      set startDay to dd as integer
      set mm to text 4 thru 5 of actDate
      set im to mm as integer
      set yy to text 7 thru 8 of actDate
      set yyyy to ("20" & yy) as integer
      set okay to 1
    on error
      display dialog "Dieses Datum ist ungültig.
Deine Eingabe: " & actDate & "

Neuer Versuch?" with icon 2
    end try
    if startDay < 0 or startDay > 31 then
      set okay to 0
      display dialog "Der Start-Tag ist unmöglich.
Deine Eingabe: " & actDate & "

Neuer Versuch?" with icon 2
    end if
    if im < 0 or im > 12 then
      set okay to 0
      display dialog "Diesen Monat gibt es nicht.
Deine Eingabe: " & actDate & "

Neuer Versuch?" with icon 2
    end if
  end repeat
  set noGood to 0
  set testVal to dd & mm & yy
  if (count of testVal) is 6 then
    repeat with i from 1 to 6
      set curChar to character i of testVal
      if curChar is not in "0123456789" then
        set noGood to 1
        exit repeat
      end if
    end repeat
  end if
  if noGood = 1 then
    display dialog "Ungültiges Datum!
Deine Eingabe: " & actDate & "

Bitte Script neu starten." buttons "OK" default button 1 with icon 0
    error number -128
  end if
 
  if yyyy mod 4 = 0 then
    set dayLs to {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  else
    set dayLs to {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  end if
  set endDay to item im of dayLs
  if endDay < startDay then
    display dialog "Dieses Datum ist ungültig.
Deine Eingabe: " & actDate & "

Bitte Script neu starten." buttons "OK" default button 1 with icon 0
    error number -128
  end if
 
  set AppleScript's text item delimiters to {":"}
  repeat with anObject in itemList
    set folderPath to anObject as string
    if folderPath ends with ":" then
      set containerPath to text items 1 thru -3 of folderPath
      set oldName to text item -2 of folderPath
      if (count of oldName) > 8 then
        set restName to text 9 thru -1 of oldName
        repeat with i from startDay to endDay
          set newName to (text -2 thru -1 of ("0" & i)) & "." & mm & "." & yy & restName
          try
            tell application "Finder" to set newFolder to (duplicate folder folderPath)
            tell application "Finder" to set name of newFolder to newName
          end try
        end repeat
      end if
    end if
  end repeat
  set AppleScript's text item delimiters to {":"}
end open
---
Das kompilierte Droplet ist unterwegs.

Hans Haesler <[email protected]>

ordnersysteme anlegen

Anonym
Beiträge gesamt: 22827

16. Sep 2004, 10:01
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
hallo hans!

grandios, wie das abgeht!!!

den umbenennungsteil kann ich auch sehr gut benutzen, um dateien, die fuer eine ordneraktion nicht die erwartete syntax haben (redakteure koennen sich "zu" einfache dinge einfach nicht merken;-)) zu aendern.

on open fileList
 repeat with aFile in fileList
  set AppleScript's text item delimiters to {":"}
  set fullPath to aFile as string
  if fullPath ends with ":" then
  else
   set fileName to last text item of fullPath
   if fileName contains "_" then
    set AppleScript's text item delimiters to {"_"}
    set newName to (text item 1 of fileName) & "/" & (text item 2 of fileName)
    try
     tell application "Finder" to set name of file fullPath to newName
    end try
   end if
   
   if fileName contains "-" then
    set AppleScript's text item delimiters to {"-"}
    set newName to (text item 1 of fileName) & "/" & (text item 2 of fileName)
    try
     tell application "Finder" to set name of file fullPath to newName
    end try
   end if
   
   
   if fileName contains "." then
    set AppleScript's text item delimiters to {"."}
    set newName to (text item 1 of fileName) & "/" & (text item 2 of fileName)
    try
     tell application "Finder" to set name of file fullPath to newName
    end try
   end if
  end if
 
 
 end repeat
 set AppleScript's text item delimiters to {""}
end open

also zwei fliegen mit einer klappe :)

so langsam riechts nach wochenende &#133;

cu

hans

ordnersysteme anlegen

Hans Haesler
  
Beiträge gesamt: 5805

16. Sep 2004, 15:11
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
Hallo Hans,

prinzipiell sollten solche Tests mit 'else if' verlinkt werden. Sonst &#150; mit 'if / end if' &#150; wird
jeder Test durchgeführt, auch wenn zuvor schon eine Übereinstimmung gefunden wurde.
---
on open fileList
  repeat with aFile in fileList
    set AppleScript's text item delimiters to {":"}
    set fullPath to aFile as string
    if fullPath ends with ":" then
    else
      set fileName to last text item of fullPath
      if fileName contains "_" then
        set AppleScript's text item delimiters to {"_"}
        set newName to (text item 1 of fileName) & "/" & (text item 2 of fileName)
        try
          tell application "Finder" to set name of file fullPath to newName
        end try
      else if fileName contains "-" then
        set AppleScript's text item delimiters to {"-"}
        set newName to (text item 1 of fileName) & "/" & (text item 2 of fileName)
        try
          tell application "Finder" to set name of file fullPath to newName
        end try
      else if fileName contains "." then
        set AppleScript's text item delimiters to {"."}
        set newName to (text item 1 of fileName) & "/" & (text item 2 of fileName)
        try
          tell application "Finder" to set name of file fullPath to newName
        end try
      end if
    end if
  end repeat
  set AppleScript's text item delimiters to {""}
end open
---
Gut, der Unterschied wird kaum spürbar sein.

Abgesehen davon, dass ich nicht verstehe, warum ein Underscore durch einen Bruchstrich
ersetzt wird: Und wenn zwei solcher Zeichen im Namen vorkommen? Dann wird ein Teil des
Namens gelöscht. Was ist, wenn im gleichen Namen ein Bindestrich und ein Punkt stehen?

Hans Haesler <[email protected]>

ordnersysteme anlegen

Anonym
Beiträge gesamt: 22827

16. Sep 2004, 17:44
Bewertung:

gelesen: 3045

Beitrag als Lesezeichen
hallo hans,

der "/" dient zur angabe der spaltigkeit. beispielname: humbug/3dr90.jpg oder humbug3spdr180.jpg.

im script wird nur / oder sp abgefragt; aus gewohnheit wird von vielen redaktionen aber noch "." "_" und "-" verwendet. doppelt vorkommen kann nur der punkt, dann faellt zwar das suffix weg, ist aber unerheblich, da die datei soweiso ein neues bekommt. dr90 steht fuer eventuellen drehwinkel.

nochmal besten dank!

cu

hans