damit in einem Dialog ein Eingabefeld erscheint, muss die Befehlszeile die Worte 'default answer', gefolgt von zwei Anführungszeichen (= ein leerer String) enthalten. (N.B.: Man sollte in diesem Fall darauf verzichten, ein Icon anzuzeigen. Das ist nicht "Mac-like".)
Mit dem oben gezeigten Befehl erscheint die Textzeile (welche nach Belieben angepasst werden kann) und darunter eine leeres Eingabefeld (= der leere String) mit blinkendem Cursor.
Es gibt Fälle, in welchen man dem Anwender eine Eingabe vorschlägt, welcher er dann ändern oder mit "OK" bestätigen kann: Jetzt erscheint in der Eingabezeile der ausgewählte Vorgabewert. Wenn man das Script ausführt und auf "OK" klickt, dann sieht man im Ergebnisfenster eine Liste mit zwei Elementen: --> {text returned:"0.5 pt", button returned:"OK"}
Das Übernehmen der Antwort geschieht am elegantesten mit folgender Syntax: Damit enthält die Variable 'docbasename' schon den gewünschten Namen. Weil die buttons "Abbruch" und "OK" automatisch eingefügt werden, muss man sich nicht darum kümmern, was denn der 'button returned' nun war. Wenn der Anwender "OK" klickt, ist seine Eingabe in der Variablen, wenn er "Abbruch" gewählt hat, dann wird die Ausführung beendet.
Klar muss man das Ergebnis testen: Ist es kein leerer String? Ist der Name nicht zu lang? Enthält er kein verbotenes Zeichen?
naechste woche werde ich mich naeher mit dem script beschaeftigen. es geht darum unsere hausfotografen in einer recht stupiden arbeit zu entlasten. fuer mich springt dabei im erfolgsfalle ein feines abendessen heraus ;-)
eventuell braeuchte ich dann nochmal deine hilfe, wenn es darum geht die files mit docbasename + indexnummerierung zu speichern. also name der datei = docbasename + nummer . ich werde das ganze wohl als droplet anlegen.
die ps-befehle werde ich wohl (hoffentlich) alleine hinbekommen ;-)
schlafet fein und traeumet suess und macht ins bettchen kein gemues (sorry, ist schon frueh …)
ich habe mich heute abend mal daran probiert. das auslesen der antwort aus display dialog klappt prima, aber nun weiss ich nicht wie man die dateien in der "benamung" durchzaehlen kann.
die dateien sollen also folgenermassen gesichert werden: name01 name02 name03 usw.
hier das bisherige script:
on open droppedfile
set temp to display dialog "hallo michael! tu mal name:" default answer ""
set outputFolder to choose folder set filesList to droppedfile repeat with aFile in filesList
set fileIndex to 0
tell application "Finder" set theFile to aFile as alias set theFileName to name of theFile end tell
tell application "Adobe Photoshop 7.0"
open theFile
«event miscdosc» "dateiinfo"
set docBaseName to text returned of temp set newFileName to (outputFolder as string) & docBaseName&fileindex+1 save current document in file newFileName as JPEG appending lowercase extension close current document without saving
end tell
end repeat
end open
- - - - - -
fileindex+1 schreibt natuerlich immer nur name1 …
wenn ich die dateien beim oeffnen durchzaehlen koennte, dann waere es mir ja schon moeglich eine variable zu setzen.
ja, das geht. Zunächst aber zwei wichtige Korrekturen: 1) 'droppedfile' ist schon eine Liste von Aliassen. Man braucht also die Variablen 'filesList' nicht und statt 'theFile' zu öffnen, kann man 'aFile' benutzen. 2) Wie schon gesagt, 'aFile' ist ein Alias und muss nicht in ein solches verwandelt werden. Der Finder kann also mit einem (effizienteren) Einzeiler eingesetzt werden.
Eine weitere Vereinfachung: die Variable 'docBaseName' direkt mit der Eingabe des Anwenders füttern.
Zur Numerierung: Am einfachsten wäre, die automatische Zählervariable, z.B. 'repeat with i from 1 to ...' zu benutzen. Denn diese wird automatisch bei jedem Umgang um eins erhöht. Die führende Null kann man leicht einfügen, indem getestet wird, ob der Zähler einstellig ist oder nicht: 'if i < 10 then...'. Aber es geht auch einfacher. Siehe weiter unten.
Weil Du aber mit 'aFile' die Liste durchgehst, muss man einen zusätzlichen Zähler einrichten. Der Ansatz ist mit 'fileIndex' schon da. Und auch das Erhöhen des Wertes mit '+1'. Allerdings nicht komplett. Und an der falschen Stelle. Deshalb folgende zwei Korrekturen: 1) 'set fileIndex to 1' --> bei Eins beginnen 2) 'set fileIndex to fileIndex + 1' --> vor dem 'end repeat' einfügen.
Und wie kommt die Null dazwischen? So: '... & text -2 thru -1 of ("0" & fileIndex)'
Alles klar? Nicht ganz. Also … die "0" und der Wert von 'fileIndex' wird zu einem String zusammengefasst. Davon nimmt man den Text ab zweitletztem Buchstaben (= -2) bis (= thru) zum letzten Buchstaben (= -1). Von "01" bis "09": kein Problem. Aber auch mit "010", "011" usw. funktioniert diese Formulierung. Ohne Test von wegen Wert. Dass die Null ab '10' "umsonst" vorgehängt wird, tut nicht weh.
Hier die angesprochenen Zeilen im Zusammenhang (aber ich habe das Script ausnahmsweise nicht getestet): --- on open droppedfile set docBaseName to text returned of (display dialog "hallo michael! tu mal name:" default answer "") set outputFolder to choose folder
repeat with aFile in droppedfile set fileIndex to 1 tell application "Finder" to set fileName to name of aFile
tell application "Adobe Photoshop 7.0" open aFile «event miscdosc» "dateiinfo" set newFileName to (outputFolder as string) & docBaseName & text -2 thru -1 of ("0" & fileIndex) save current document in file newFileName as JPEG appending lowercase extension close current document without saving end tell
set fileIndex to fileIndex + 1
end repeat end open set newFileName to (outputFolder as string) & docBaseName & fileName & text -2 thru -1 of ("0" & fileIndex) set newFileName to (outputFolder as string) & docBaseName & "_" & fileName & "_" & text -2 thru -1 of ("0" & fileIndex) --- … damit der neue Name etwas lesbarer wird.
ich kann's grad nicht testen, aber ich bin mir relativ sicher das es funzt.
vielleicht verstehe ich sogar noch wie das funktioniert ;-)
also danke!!!
by the way: zu thefile aus einem samplescript von adobe:
tell application "Finder" -- The step below is important because the 'aFile' reference as returned by -- Finder associates the file with Finder and not Photoshop. By converting -- the reference below 'as alias', the reference used by 'open' will be -- correctly handled by Photoshop rather than Finder. set theFile to aFile as alias set theFileName to name of theFile end tell
das verstehe ich nicht. Bitte sende mir doch das Script, welches nicht zählen kann.
Natürlich fängt die vorgeschlagene Version bei jeder Ausführung bei 1 an. Aber wenn fünf Dateien darauf gezogen werden, dann sollten sie mit den Nummern 01 bis 05 versehen werden. Wenn beim nächsten Ausführen mit der Nummer 06 fortgefahren werden sollte, dann muss man die Variable 'fileIndex' zu Beginn des Scripts als 'property' deklarieren und zugleich initialisieren: Damit wird erreicht, dass der aktuelle Wert gespeichert wird. Und bei der nächsten Ausführung unter gleichem 'database'-Namen werden bestehende Dateien nicht überschrieben. Aber nochmals: wenn das Script innerhalb der Repeat-Schleife die Zeile 'set fileIndex to fileIndex + 1' enthält, dann sollten während der gleichen Session die Dateien, welche die gleiche Wurzel haben, nicht überschrieben werden.
ich habe einfach dein obiges script ohne aenderung kopiert und als programm abgelegt. ich hab's auf zwei rechnern probiert; einmal mit as 1.6 und einmal mit 1.8x.
ja, natürlich! Jetzt sehe ich es: das kann nicht funktionieren. Beim Ändern Deines Scripts habe ich die Initialisierung von 'fileIndex' am ursprünglichen Platz belassen. Diese Zeile muss ausserhalb der Repeatschleife stehen. So … --- set fileIndex to 1 repeat with aFile in droppedfile --- … sonst wird der Wert bei jedem Umgang wieder auf '1' gesetzt.
Ich habe zwar darauf hingewiesen, dass ich das ganze Script nicht getestet habe. Trotzdem: entschuldige bitte die Fehlinformation.
leider koennen unsere fotografen nur auf ps 5.5 zurueckgreifen (haet ich vielleicht mal vorher abklaeren sollen ;-)). das bedeuted, das die umbennenung der files schon im finder geschehen muss.
wie immer: mein versuch funktioniert nicht
on open droppedfile set fileIndex to 1
set docBaseName to text returned of (display dialog "hallo michael! tu mal name:" default answer "") & text -2 thru -1 of ("0" & fileIndex) set outputFolder to choose folder
repeat with aFile in droppedfile tell application "Finder" to duplicate file aFile to outputFolder with replacing set name of selection to (docBaseName as string) & ".jpg"
nicht verzagen! Das kriegen wir schon hin. Zwei Probleme: 1) Das Durchnumerieren ist ausserhalb der Repeat-Schleife. 2) 'name of selection' kann nicht funktionieren, weil alle Dateien ausgewählt sind.
Es gibt drei Möglichkeiten: A) Die Dateien umbenennen und in den Zielordner verschieben. B) Die Dateien umbenennen und in den Zielordner kopieren. C) Die Dateien in den Zielordner kopieren und erst dann umbenennen.
A und B sind einfach. C auch … aber nur wenn man den Wert von 'fileIndex' zur Identifikation nehmen kann, das heisst, wenn die Aktion nur ein einziges Mal mit dem gleichen Zielordner ausgeführt wird (oder er würde geleert). Sonst muss man den Namen der Datei speichern, damit man sie im Zielordner identifizieren kann
Hier schon mal der Code für die Lösung B: --- on open droppedfile set docBaseName to text returned of (display dialog "hallo michael! tu mal name:" default answer "") set outputFolder to choose folder set fileIndex to 1
repeat with aFile in droppedfile set newName to docBaseName & text -2 thru -1 of ("0" & fileIndex) & ".jpg" tell application "Finder" to set name of file aFile to newName tell application "Finder" to move file aFile to outputFolder with replacing set fileIndex to fileIndex + 1 end repeat
end open --- Zum Duplizieren ganz einfach 'move' durch 'duplicate' ersetzen. Und so sieht die Lösung C aus, mit dem Speichern des alten Namens: --- on open droppedfile set fileIndex to 1
set docBaseName to text returned of (display dialog ¬ "hallo michael! tu mal name:" default answer "") set outputFolder to choose folder
repeat with aFile in droppedfile tell application "Finder" to set fileName to name of file aFile tell application "Finder" to duplicate file aFile to outputFolder with replacing set newName to docBaseName & text -2 thru -1 of ("0" & fileIndex) & ".jpg" tell application "Finder" to set name of file fileName of outputFolder to newName set fileIndex to fileIndex + 1 end repeat
end open ---
Ich habe den Zwischenschritt 'set newName …' mit der Zusammensetzung (= concatenation) des neuen Names eingefügt. Dadurch wird die Befehlszeile kürzer und der geplagte Finder hat es etwas einfacher.