Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Simon_W •->

Anmeldedatum: 21.01.2010 Beiträge: 5
|
Verfasst am: 21.01.2010 - 10:58 Titel: Komme nicht weiter |
|
|
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 |
|
 |
hubionmac •--->


Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 23.01.2010 - 08:44 Titel: |
|
|
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 |
|
 |
Simon_W •->

Anmeldedatum: 21.01.2010 Beiträge: 5
|
Verfasst am: 29.01.2010 - 10:30 Titel: |
|
|
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 |
|
 |
hubionmac •--->


Anmeldedatum: 26.02.2004 Beiträge: 245 Wohnort: Münster
|
Verfasst am: 29.01.2010 - 10:54 Titel: |
|
|
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 |
|
 |
Simon_W •->

Anmeldedatum: 21.01.2010 Beiträge: 5
|
Verfasst am: 01.02.2010 - 10:55 Titel: |
|
|
Danke viel mals für die super erklärung!
Dieses Wissen wird mein Skript nun erheblich vereinfachen. |
|
Nach oben |
|
 |
Simon_W •->

Anmeldedatum: 21.01.2010 Beiträge: 5
|
Verfasst am: 11.02.2010 - 12:04 Titel: |
|
|
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 |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 12.02.2010 - 00:49 Titel: |
|
|
deine schleife ist falsch _________________ - anholn deit kriegen - |
|
Nach oben |
|
 |
Simon_W •->

Anmeldedatum: 21.01.2010 Beiträge: 5
|
Verfasst am: 12.02.2010 - 09:57 Titel: |
|
|
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 |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 12.02.2010 - 22:25 Titel: |
|
|
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 |
|
 |
|
|
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
|
|
|