Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Komme nicht weiter

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Simon_W
•->
•->


Anmeldedatum: 21.01.2010
Beiträge: 5

BeitragVerfasst am: 21.01.2010 - 10:58    Titel: Komme nicht weiter Antworten mit Zitat

Guten Tag miteinander.

Ich Arbeite als Grafiker-Lehrling und habe in den ruhigen Minuten begonnen
ein kleines Applescript zu entwickeln welches mir die Arbeit etwas erleichtern
soll. Und zwar bekomme ich ab und zu Routineaufgaben z.B. viele bilder für's
Web verkleinern und umzubenennen. Da ich nicht 50 mal IMG_1234.jpg durch DieseFirma_1234.jpg per hand ersetzen will habe ich dafür ein script
geschrieben. Ich wollte dabei etwas lernen und habe daher nicht einfach den Automator benutzt.
Das Script funktioniert folgendermassen: Die dateien welche umbenannt
werden sollen, werden in den ordner "Umbenennen" auf dem schreibtisch
gelegt. Man startet das Script, welches einen fragt welcher Textteil
umbenannt werdem soll. In meinem Beispiel (oben) wäre das "IMG".
Danach fragt es, wodurch der Teil ersetzt werden soll. Das wäre dann
"DieseFirma". Schlussendlich wird noch gefragt wodurch die textteile
getrennt werden - für den Fall das die Textteile eben nicht durch einen
Lehrschlag, sondern durch einen "_" getrennt werden.

Das funktioniert soweit so gut, die Dateien werden Umbenannt und falls
sie eine datei endung haben so wird diese sogar beibehalten.
Jedoch nennt das Script TEILWEISE nur die Hälfte der im Ordner
vorhandenen Dateien um. Manchmal aber auch alle. Ich konnte leider
keine Regel feststellen.

Ich wäre froh wenn sich das jemand mal ansehen könnte.
Ich habe leider bei der Arbeit nur sehr wenig Zeit dafür, immer nur
kurz nebenbei. Zuhause habe ich leider keinen Mac.
Trodsdem würde ich das Script gerne noch Salonfähig machen,
es ist ja beinahe fertig aber ich kann diesen Fehler einfach nicht finden.

Ich wäre sehr froh wen mir jemand Helfen könnte.

Code:
set createUmbenennen to "Umbenennen"

tell application "Finder"
   if (exists folder createUmbenennen of desktop) is false then
      make new folder with properties {name:"Umbenennen"}
   end if
end tell


set standvar1 to display dialog "Welcher Text-Teil soll ersetzt werden?" default answer ""
set zuErsetzen to the text returned of standvar1


set standvar3 to display dialog "Wodurch soll der Text-Teil ersetzt werden?" default answer ""
set neuName to the text returned of standvar3 as list


set standvar4 to display dialog ¬
   "Wodurch werden die Textteile in den umzubenennenden Dateien getrennt?
   
      (z.B." & zuErsetzen & " 23, " & zuErsetzen & "_23, oder
      " & zuErsetzen & "-23)" buttons {" ", "_", "-"} default button " "
set delimitersvar to the button returned of standvar4


tell application "Finder" to set AnzahlItems to the count items of folder "Umbenennen" of desktop

set counter to 1

delay 0.3

repeat AnzahlItems times
   
   
   tell application "Finder" to set OrdnerName to the name of item counter of folder "Umbenennen" of desktop
   
   
   if OrdnerName is not "." or ".." or ".DS_Store" then
      set testdeName to every character of OrdnerName as list
      if testdeName contains "." then
         set oldDelimiters to AppleScript's text item delimiters
         set AppleScript's text item delimiters to "."
         set endungVar to every text item of OrdnerName as list
         set AppleScript's text item delimiters to oldDelimiters
         if the last item of endungVar contains {"tiff"} or {"ai"} or {"psd"} or {"indd"} or {"gif"} or {"pdf"} or {"qxd"} or {"eps"} or {"tif"} or {"png"} or {"doc"} or {"CR2"} or {"jpeg"} then
            
            set endung to the last item of endungVar as string
            set the last item of endungVar to ""
            set oldDelimiters to AppleScript's text item delimiters
            set namenListe to every item of endungVar as string
            delay 0.3
            
         else
            set endung to ""
         end if
         
      else
         set endung to ""
      end if
      set namenListe to OrdnerName as string
      set oldDelimiters to AppleScript's text item delimiters
      set AppleScript's text item delimiters to delimitersvar
      set namenListe to every text item of namenListe as list
      set AppleScript's text item delimiters to oldDelimiters
      
      
      set standvar2 to the count item of namenListe
      set itemZahl to standvar2 as number
      
      
      if itemZahl > 0 then
         if item 1 of namenListe is zuErsetzen then
            set item 1 of namenListe to item 1 of neuName
         end if
      end if
      
      
      if itemZahl > 1 then
         if item 2 of namenListe is zuErsetzen then
            set item 2 of namenListe to item 1 of neuName
         end if
      end if
      
      
      if itemZahl > 2 then
         if item 3 of namenListe is zuErsetzen then
            set item 3 of namenListe to item 1 of neuName
         end if
      end if
      
      
      if itemZahl > 3 then
         if item 4 of namenListe is zuErsetzen then
            set item 4 of namenListe to item 1 of neuName
         end if
      end if
      
      
      if itemZahl > 4 then
         if item 5 of namenListe is zuErsetzen then
            set item 5 of namenListe to item 1 of neuName
         end if
      end if
      
      
      if itemZahl > 5 then
         if item 6 of namenListe is zuErsetzen then
            set item 6 of namenListe to item 1 of neuName
         end if
      end if
      set AppleScript's text item delimiters to delimitersvar
      set namenListe to namenListe as string
      set AppleScript's text item delimiters to oldDelimiters
      
      delay 0.3
      
      
      if endung is not "" then
         set AppleScript's text item delimiters to "."
         set namenListe to {namenListe, endung}
         set namenListe to namenListe as string
         set AppleScript's text item delimiters to oldDelimiters
         
      else
         set namenListe to namenListe as string
      end if
      
   else if OrdnerName is "." or ".." or ".DS_Store" then
      set namenListe to OrdnerName
      
   end if
   
   delay 0.3
   
   
   tell application "Finder" to set the name of item counter of folder "Umbenennen" of desktop to namenListe
   
   set counter to counter + 1
   
end repeat


set standvar6 to display dialog "Dateien erfolgreich umbenannt." buttons {"Schliessen"} default button {"Schliessen"}

if the button returned of standvar6 is {"Schliessen"} then
   set AnzahlItems to empty
   set endung to empty
   set counter to empty
   set endungVar to empty
end if

quit
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 23.01.2010 - 08:44    Titel: Antworten mit Zitat

Servus Simon,

für beide Aufgaben hatte ich bereits einzelne Skripte.
Speichere den Code hier mal als AppleScript-Programm ab, dann ziehst Du einfach die Bilder die du skaliert und umbenannt haben möchtest auf das AppleSkript-Programm.
Die unbenannten Bilder landen im Ordner scaled, bei den Originalen.

Zitat:
on open some_items
   tell me to activate
   display dialog "Längste Seite" default answer "1024"
   set mh to (text returned of the result) as integer
   display dialog "Replace:" default answer ""
   set searchstring to text returned of the result
   display dialog "with:" default answer ""
   set replacestring to text returned of the result
   repeat with this_item in some_items
      try
         my rescale_and_save(this_item, mh, searchstring, replacestring)
      on error msg
         error msg
      end try
   end repeat
end open


to rescale_and_save(this_item, target_width, searchstring, replacestring)
   tell application "Image Events"
      launch
      -- open the image file
      set this_image to open this_item
      
      set typ to this_image's file type
      
      copy dimensions of this_image to {current_width, current_height}
      
      if current_width is greater than current_height then
         set new_height to (target_width * current_height) / current_width
         if (new_height * target_width) < (current_width * current_height) then
            
            scale this_image to size target_width
         end if
      else
         if (new_height * target_width) < (current_width * current_height) then
            set new_height to (target_width * current_width) / current_height
            scale this_image to size new_height
         end if
      end if
      
      tell application "Finder"
         --Dateinamen ggf. ändern
         set itemname to name of this_item
         set AppleScript's text item delimiters to searchstring
         set the item_list to every text item of itemname
         set AppleScript's text item delimiters to replacestring
         set this_text to the item_list as string
         set AppleScript's text item delimiters to ""
         set newname to this_text as text
         
         
         if (folder "_scaled" of (container of this_item)) exists then
         else
            make new folder at (container of this_item) with properties {name:"_scaled"}
         end if
         set new_item to ((folder "_scaled" of container of this_item) as string) & newname
      end tell
      save this_image in new_item as typ
      
   end tell
end rescale_and_save


_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simon_W
•->
•->


Anmeldedatum: 21.01.2010
Beiträge: 5

BeitragVerfasst am: 29.01.2010 - 10:30    Titel: Antworten mit Zitat

hubionmac

Danke dir viel mal für dein Skript. Für mich ist natürlich
besonders der teil in dem Applescript's text item delimiter
interessant. So wie ich das verstanden habe, kann man einen
ganzen String als den item delimiter festlegen. Wen man danach
eine Variable als "every text item of" einer liste, definiert, dann
sucht applescript nach dem String, löscht ihn raus, merkt sich
die Position und definiert die teile links und rechts davon als
einzelne text items. wenn man dann den item delimiter neu
definiert, und die variable als string setzt, schreibt applescript
automatisch diese delimiter variable and die Position an welcher
vorhin zeichen weg gelöscht wurden.

Ist das Richtig so?
Wenn ja: Wie lange merkt sich Applescript's text item delimiter
die Positionen an welcher er vorhin die ihm zugewiesenen Variablen
entfernt hat? So lange bis man den delimiter neu definiert?

Nochmals danke für das Lehreiche Skript.

Simon
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 29.01.2010 - 10:54    Titel: Antworten mit Zitat

Nun, ein delimiter ist Trennzeichen...
Als Beispiel:
Zitat:
set a to "Milch, Butter, Zucker, Honig, ein halbes Schwein -> Keine Ahnung"
get every text item of a
]


ergbit eine Liste alles Zeichen also:
Zitat:
{"M", "i", "l", "c", "h", ",", " ", "B", "u", "t", "t", "e", "r", ",", " ", "Z", "u", "c", "k", "e", "r", ",", " ", "H", "o", "n", "i", "g", ",", " ", "e", "i", "n", " ", "h", "a", "l", "b", "e", "s", " ", "S", "c", "h", "w", "e", "i", "n", " ", "-", ">", " ", "K", "e", "i", "n", "e", " ", "A", "h", "n", "u", "n", "g"}


mit dem delimiter kann ich aber nun festlegen, was als Trennzeichen angesehen werden soll, das kann ein Zeichen oder auch ein ganzer Satz sein. Der Clou ist halt, dass Du so recht schnell eine Liste erstellen kannst, bzw. (wie im Beispiel in meiner ersten Antwort) das Trennzeichen gegen ein anderes Ersetzen kannst.

Zitat:
set a to "Milch, Butter, Zucker, Honig, ein halbes Schwein -> Keine Ahnung"
set AppleScript's text item delimiters to " -> "
set Ergebnis to text item 2 of a
set Zutaten to text item 1 of a
set AppleScript's text item delimiters to ", "
set Zutaten_liste to every text item of Zutaten
set AppleScript's text item delimiters to ""
get Zutaten_liste


ergibt:
Zitat:
{"Milch", "Butter", "Zucker", "Honig", "ein halbes Schwein"}


Wichtig ist nur, dass du den delimiter wenn du Ihn nicht mehr brauchst wieder auf nix setzt (also ""), sonst kann das Ergebnis beim einlesen und schreiben von Variablen im weiteren Verlauf des Skriptes etwas anders laufen, als Du es Dir vorstellst.
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Simon_W
•->
•->


Anmeldedatum: 21.01.2010
Beiträge: 5

BeitragVerfasst am: 01.02.2010 - 10:55    Titel: Antworten mit Zitat

Danke viel mals für die super erklärung!
Dieses Wissen wird mein Skript nun erheblich vereinfachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Simon_W
•->
•->


Anmeldedatum: 21.01.2010
Beiträge: 5

BeitragVerfasst am: 11.02.2010 - 12:04    Titel: Antworten mit Zitat

Ich habe das Skript mit dem neuen wissen nun nochmals geschrieben.
Es funktioniert, aber mein Problem besteht noch immer.
Es benennt nur die Hälfte der datein um!
Ich habe keinen blassen schimmer weshalb, aber ich könnte
mir vorstellen dass das gar nichts mit meinem Skript zu tun hat. Hat jemand vom euch eine Idee?

Code:
on open some_items
   set thePath to "Macintosh HD:Users:5:Desktop:Umbenennen" as alias
   tell application "Finder"
      move some_items to folder thePath
   end tell
   
   set standvar1 to display dialog "Welcher Text-Teil soll ersetzt werden?" default answer ""
   set zuErsetzen to the text returned of standvar1
   
   set standvar3 to display dialog "Wodurch soll der Text-Teil ersetzt werden?" default answer ""
   set neuName to the text returned of standvar3 as list
   
   tell application "Finder"
      set AnzahlItems to the count of items of folder "Umbenennen" of desktop
   end tell
   set counter to 1
   
   repeat AnzahlItems times
      set delimitersvar to AppleScript's text item delimiters
      tell application "Finder"
         set OrdnerName to the name of item counter of folder "Umbenennen" of desktop
      end tell
      set AppleScript's text item delimiters to zuErsetzen
      set NameList to every text item of OrdnerName
      set AppleScript's text item delimiters to neuName
      set NameDev to NameList as string
      set AppleScript's text item delimiters to delimitersvar
      tell application "Finder"
         set the name of item counter of thePath to NameDev
      end tell
      set counter to counter + 1
   end repeat
end open


übrigens wi kann ich den code mit einer Syntax hervorhebung posten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 12.02.2010 - 00:49    Titel: Antworten mit Zitat

deine schleife ist falsch
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Simon_W
•->
•->


Anmeldedatum: 21.01.2010
Beiträge: 5

BeitragVerfasst am: 12.02.2010 - 09:57    Titel: Antworten mit Zitat

Was an meiner Schlaufe ist den genau falsch?
Sie geht von 1 aus, also behandelt sie zuerst die erste datei.
Das umbenennen scheint ja zu funktionieren.
Danach setzt es den zähler zu dessen vorherigen wert +1.
Das gibt dan zwei. Das heisst es behandelt das nächste mal
Die zweite datei. Das ganze führt es soviele male aus wie es
Files in dem ordner hat (AnzahlItems times).
Mit 4 jpg's hat es vohrin funktioniert, bei einem erneuten
Versuch nicht mehr. (nur bei der hälfte) ich kann mir nicht
Vorstellen dass das nur mit meiner schleife zu tun hat, oder doch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 12.02.2010 - 22:25    Titel: Antworten mit Zitat

du referenzierst die dateien mit item x of ...

wenn du jetzt z.b. item 10 hast, es umbenennst, und dann mit item 11 weitermachst, ist das ursprünglich item 10 vielleicht das item 11. es kommt also 2mal dran, während andere dafür gar nicht behandelt werden.

es geht ausserdem viel einfacher mit dem referenzieren:
der open-handler übergibt dir ja die liste der dateien/ordner, die umbenannt werden sollen. diese liste ist eine alias-liste. du kannst sie deshalb durchaus per finder verschieben lassen, und die referenzen trotzdem danach weiternutzen (das ist der grosse vorteil von aliasen).

durchlaufe sie nun einfach mit einer schlaufe in dieser form:

repeat with one_item in some_items
-- und hier dann one_item umbenennen
end repeat

... und warum eigentlich neuName to ... as list?
_________________
- anholn deit kriegen -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter