Die Idee hinter einem kleinen Projekt, an dem ich arbeite, ist die Möglichkeit, eine Musikdatei hochzuladen und sie von After Effects aufnehmen und innerhalb einer Videodateivorlage, die ich habe, rendern zu lassen.
Der Arbeitsablauf wäre:
Sobald ich eine neue Musikdatei in einen Ordner in meinem iCloud Drive hochgeladen habe, würde dies von meinem iMac überwacht werden. Jede neue Musikdatei löst ein Adobe-Skript aus, das die neue Spur in ein Adobe After Effects-Projekt importiert, das sie nach AME exportiert und dann beendet. Die Musik wird dann in ein anderes Verzeichnis verschoben.
Ich bin auf ein Problem mit der Übergabe eines Dateinamens an ein Adobe-Skript gestoßen. Um dies zu umgehen, habe ich eine Adobe-Skriptvorlage mit einem Platzhalter-Dateinamen erstellt (der Dateipfad wäre immer derselbe), der dupliziert werden kann Platzhalter-Dateiname ersetzt (über ein Batch-Skript, obwohl es einen einfacheren Weg geben könnte, würde ich vermuten), ausgeführt und dann gelöscht.
Als ersten Durchgang habe ich versucht, mich darauf zu konzentrieren, den Namen neuer Dateien in den Ordner zu bekommen, jetzt mit gemischtem Erfolg. Wenn ich eine an den Ordner angehängte AppleScript- Skriptdatei (.scpt) ausführe, kann ich den Dateinamen anzeigen und an eine Batchdatei übergeben. Das Problem ist nun, dass es mit dem Automator-Äquivalent nicht zu funktionieren scheint.
Code unten:
on adding folder items to thisFolder after receiving theseItems
repeat with i from 1 to count theseItems
try
set thisItem to item i in theseItems
set thisItemsInfo to info for thisItem
set thisItemsFileName to quoted form of name in thisItemsInfo
display dialog thisItemsFileName buttons {"Continue"}
do shell script "/Users/jeffolaa/ReplaceName.sh " & thisItemsFileName
end try
end repeat
end adding folder items to
Der ReplaceName-Batch ist ein einzelner Befehl:
#!/bin/bash
sed -i.bu 's/EDITTHIS/'$1'/' /Users/jeffolaa/Library/Mobile\ Documents/com\~apple\~CloudDocs/Documents/Adobe\ Scripts/AddMusicExport.jsx
Bisher sieht mein Automator-Workflow so aus:
Jede Hilfe wird sehr geschätzt!
Hinweis: Diese Antwort wurde auf der Grundlage der ursprünglichen Veröffentlichung der Frage und insbesondere der ersten drei Absätze dieser Antwort ohne diesen Hinweis verfasst. Seitdem wurde das OP aktualisiert, um auf das einzugehen, was in den ersten drei Absätzen ausgedrückt wurde, und sie scheinen jetzt aus dem Zusammenhang gerissen zu sein. Wenn man sich jedoch den Bearbeitungsverlauf des OP ansieht, kann man die Relevanz im Kontext der ursprünglichen Frage erkennen. Sie bleiben vorerst bestehen, bis ich die Zeit habe, eine entsprechende Bearbeitung vorzunehmen.
Entschuldigung, aber Ihre Frage ist nicht so gut definiert und es ist nicht ganz klar, welche Aktionen Sie dem Automator Folder Action- Workflow hinzugefügt haben , abgesehen von der offensichtlichen Run AppleScript- Aktion . Es ist auch nicht klar, ob vor oder nach der Aktion „AppleScript ausführen“ Aktionen hinzugefügt wurden . Außerdem ist nicht klar, welcher Code enthalten ist oder was er alles tut. Was mich zu der Annahme veranlasst, dass es möglicherweise nicht ausreicht, nur die Datei an zu übergeben. Obwohl Sie den Code in nicht gesehen haben , wissen an dieser Stelle nur Sie Bescheid. /Users/jeffolaa/pointer.sh
name
pointer.sh
pointer.sh
Außerdem ist die Form des AppleScript- Codes , die Sie im OP gezeigt haben, nicht die richtige Form für einen Automator Folder Action- Workflow mit einer Run AppleScript- Aktion . Der on adding folder items
Handler ist von dem Typ , der in einer AppleScript- Skriptdatei (.scpt) verwendet wird, die dem Zielordner manuell zugewiesen wird, indem der Befehl Folder Action Setup... aus dem Kontextmenü Services in Finder verwendet wird , nicht Automator , wo Sie die verwenden müssen Handler on input
in der Aktion AppleScript ausführen .
Sie haben auch keinen Fehlerbehandlungscode , der bei Ordneraktionen wichtig ist, und die Art und Menge kann davon abhängen, was Sie in der codiert haben pointer.sh
. Mit anderen Worten, Sie möchten möglicherweise die dem Ordner hinzugefügten Elemente nach Typ filtern und sicherstellen, dass es sich um eine Datei handelt, nicht um einen Ordner, oder um einen bestimmten Dateityp mit einer bestimmten Erweiterung usw. Dies kann in Automator erfolgen, bevor es dazu kommt der Aktion „AppleScript ausführen“ oder im Code der Aktion „AppleScript ausführen“ oder im Code in oder einer Kombination aus einigen oder allen. pointer.sh
Vor diesem Hintergrund ist der folgende Beispiel- AppleScript- Code eine minimale Codierung dessen, was sinnvoll ist, um den in Anführungszeichen angegebenen vollständig qualifizierten Pfadnamen der Datei(en) übergeben zu können, die dem Zielordner hinzugefügt wurden , den Sie in Automators Ordneraktion festgelegt haben, zu dem Dateien und Ordner hinzugefügt werden [ Ordner ] , der übergeben werden soll pointer.sh
, da dies typisch für ein Argument ist , das an einen Shell - Befehl übergeben wird .
Minimaler AppleScript- Beispielcode zur Verwendung in einer Aktion „AppleScript ausführen“ in einem Automator-Ordneraktions- Workflow :
on run {input, parameters}
repeat with i from 1 to count input
try
set thisItem to item i in input
set thisItemsPathname to quoted form of POSIX path of thisItem
do shell script "/Users/jeffolaa/pointer.sh " & thisItemsPathname
end try
end repeat
end run
Minimaler Beispiel- AppleScript- Code zur Verwendung in einer AppleScript- Skriptdatei (.scpt), die manuell dem Zielordner zugewiesen wurde , indem der Befehl „Folder Action Setup...“ aus dem Kontextmenü „Services“ im Finder verwendet wird :
on adding folder items to thisFolder after receiving theseItems
repeat with i from 1 to count theseItems
try
set thisItem to item i in theseItems
set thisItemsPathname to quoted form of POSIX path of thisItem
do shell script "/Users/jeffolaa/pointer.sh " & thisItemsPathname
end try
end repeat
end adding folder items to
~/Library/Scripts/Folder Action Scripts
Um den obigen Code/Users/jeffolaa/pointer.sh
zu testen, habe ich die Datei mit dem folgenden Code darin erstellt :
#!/bin/bash
mv "$1" "$HOME/Test/"
Dadurch werden die Dateien einfach zurück in den Ordner verschoben, aus dem sie in den Zielordner gezogen wurden, dem die Ordneraktion zugewiesen ist, bei dem es sich um einen Ordner innerhalb des Testordners handelt . Dies ließ mich wissen, dass es wie codiert ordnungsgemäß funktionierte.
Wenn es sich nun nur um die name
der Datei handelt, an die Sie übergeben möchten pointer.sh
, können Sie Folgendes verwenden:
Minimaler AppleScript- Beispielcode zur Verwendung in einer Aktion „AppleScript ausführen“ in einem Automator-Ordneraktions- Workflow :
on run {input, parameters}
repeat with i from 1 to count input
try
set thisItem to item i in input
set thisItemsInfo to info for thisItem
set thisItemsFileName to quoted form of name in thisItemsInfo
do shell script "/Users/jeffolaa/pointer.sh " & thisItemsFileName
end try
end repeat
end run
Minimaler Beispiel- AppleScript- Code zur Verwendung in einer AppleScript- Skriptdatei (.scpt), die manuell dem Zielordner zugewiesen wurde , indem der Befehl „Folder Action Setup...“ aus dem Kontextmenü „Services“ im Finder verwendet wird :
on adding folder items to thisFolder after receiving theseItems
repeat with i from 1 to count theseItems
try
set thisItem to item i in theseItems
set thisItemsInfo to info for thisItem
set thisItemsFileName to quoted form of name in thisItemsInfo
do shell script "/Users/jeffolaa/pointer.sh " & thisItemsFileName
end try
end repeat
end adding folder items to
~/Library/Scripts/Folder Action Scripts
Um den obigen Code zu testen , habe ich die pointer.sh
Datei mit dem folgenden Code bearbeitet:
#!/bin/bash
say "$1"
Was einfach sagt, dass die name
Datei in enthalten ist thisItemsFileName
, was mich wissen ließ, dass sie wie kodiert richtig funktionierte.
Hinweis: Der obige Beispiel -AppleScript- Code ist genau das, und ohne ihn in eine try
Anweisung zu packen , enthält er keine andere Fehlerbehandlung , die angemessen/erforderlich/gewünscht sein könnte. Es liegt in der Verantwortung des Benutzers, eine geeignete Fehlerbehandlung für jedes Beispiel hinzuzufügen präsentierter Code und oder selbst geschriebener Code .
Wenn Sie Ihre Frage jedoch aktualisieren würden, um die fehlenden Teile wie in den ersten Absätzen meiner Antwort erwähnt auszufüllen, bearbeite ich diese Codebeispiele gerne , um zu zeigen, welche angemessene Fehlerbehandlung hinzugefügt werden sollte. Es macht einfach keinen Sinn, es hinzuzufügen, bis ich die Einzelheiten kenne.
Dank einiger erstaunlicher Vorschläge von @ user34393894 konnte ich meinen Blocker lösen.
Anstatt Automator zu verwenden, konnte ich das benötigte Ergebnis über ein AppleScript-Skript erhalten, das als Ordneraktion angehängt war.
Für alle, die daran interessiert sind, verwende ich jetzt den Code, der großartige Ergebnisse erzielt:
on adding folder items to thisFolder after receiving theseItems
repeat with i from 1 to count theseItems
try
set thisItem to item i in theseItems
set thisItemsInfo to info for thisItem
set thisItemsFileName to quoted form of name in thisItemsInfo
tell application "System Events" -- get item info
set theKind to kind of thisItem
set theExtension to name extension of thisItem
end tell
if theKind is "Folder" then
-- do folder stuff
else if theExtension is "mp3" then
do shell script "/Users/jeffolaa/ReplaceName.sh " & thisItemsFileName
end if
end try
end repeat
end adding folder items to
Wenn jemand Feedback hat oder auf dem Code aufbaut, wäre das sehr zu schätzen, immer auf der Suche nach Verbesserung!
System Events
um Artikelinformationen zu erhalten , da info for
ein AppleScript eingebaut ist und das bereits getan wurde und in thisItemsInfo
for enthalten ist thisItem
. Das heißt, die Zeile set thisItemsInfo to info for thisItem
enthält bereits die info , greifen Sie einfach wie in der nächsten Zeile darauf zu, aber entsprechend dem Wert der Eigenschaft , die Sie abrufen möchten, z.set theKind to kind in thisItemsInfo
Jeffolaa