Automator-Aktion nicht mit den erforderlichen Daten versorgt

Ich versuche, Folgendes in einem Automator-Workflow zu tun:

  1. Fragen Sie nach Finder-Elementen aus Ordner A
  2. Fügen Sie in Ordner A den Dateinamen ein Suffix hinzu
  3. Kopieren Sie sie in Ordner B
  4. Teilen Sie in Ordner B mit einem AppleScript den Dateinamen durch ein Trennzeichen und benennen Sie die Datei dann um, indem Sie die zweite Hälfte des Texts teilen
  5. Fügen Sie in Ordner B den Dateinamen ein Präfix hinzu
  6. Fügen Sie in Ordner B den Dateinamen ein Suffix hinzu

Hier ist ein Beispiel für die Dateinamen, die ich umbenennen möchte:

  • eine neue Datei $SG789.jpg
  • file_2$123-456.jpg
  • Dateiname$LG123.jpg
  • this_file$558-432.jpg

Das Trennzeichen, nach dem ich teile, ist das Dollarzeichen "$", um die folgenden neuen Dateien zu erstellen:

  • SG789.jpg
  • 123-456.jpg
  • LG123.jpg
  • 558-432.jpg

Dies sind die Dateinamenformate, die ich möchte, damit der Automator die Verarbeitung fortsetzt.

Dank eines anderen Benutzers konnte ich so weit kommen. Mein Workflow schlägt jedoch bei Schritt 5 fehl. Ich erhalte die folgende Warnung:

Die Aktion "Finder-Elemente umbenennen: Text hinzufügen" wurde nicht mit den erforderlichen Daten versorgt.

Hier ist die Workflow-Einrichtung in Automator:

Geben Sie hier die Bildbeschreibung ein

Mit dem folgenden AppleScript:

 on run {input, parameters}
     try
        set AppleScript's text item delimiters to "$"
        set output to {}
        repeat with anItem in input
            set the end of output to text item 2 of (anItem as text)
        end repeat
        set AppleScript's text item delimiters to {}
        return output
    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} ¬
            default button 1 with icon caution
        set AppleScript's text item delimiters to {}
        return
    end try
end run

Ich dachte, durch die Rückgabe der Ausgabe würde der nächste Workflow die erforderlichen Änderungen aufnehmen und mit ihnen fortfahren. Ich sehe, das ist nicht der Fall.

Wie gebe ich meine Ausgabe zurück, damit das nächste Workflow-Element sie verwenden und mit der Dateiumbenennung fortfahren kann?

Sie sagten: " Ich dachte, durch die Rückgabe der Ausgabe würde der nächste Workflow die erforderlichen Änderungen aufnehmen und fortsetzen. Ich sehe, dass dies nicht der Fall ist. " und was von der AppleScript-Aktion zurückgegeben wird, ist nur eine Liste von Dateinamen, nicht die vollständig qualifizierten Pfadnamen, und obwohl es geändert werden könnte, um den FQP zurückzugeben, funktioniert es immer noch nicht mit der nächsten Aktion, da es sich nur um eine Liste von Textzeichenfolgen handelt, nicht um Dateisystemobjekte, wie sie an die AppleScript-Aktion übergeben wurden. In der AppleScript-Aktion wurden die FSOs zu Textstrings gezwungen, um sie als Textelemente zu verarbeiten, dh (anItem as text).
Sie sagten: " Wie gebe ich meine Ausgabe zurück, damit das nächste Workflow-Element sie verwenden und mit der Dateiumbenennung fortfahren kann? ", Ich weiß nicht, ob es eine Möglichkeit gibt, das zu erreichen, was Sie mit der AppleScript-Aktion erreichen möchten. Das heißt, warum ändern Sie die Originaldateien, bevor Sie sie kopieren, das macht einfach keinen Sinn. Ich würde Finder-Elemente umbenennen: Text hinzufügen durch Finder-Elemente kopieren ersetzen. Wie auch immer, es ist mir nicht klar, warum Sie so viele verschiedene Schritte durchlaufen, wenn Sie nur versuchen, eine Datei umzubenennen, z. B. a new file$SG789.jpgin SG789.jpg.
Ich würde mich wahrscheinlich dafür entscheiden, dies mit einem Bash-Skript zu tun, meiner Meinung nach wäre es viel einfacher und effizienter. Eine andere Option besteht darin, die FSOs abzurufen, sie an die AppleScript-Aktion zu übergeben und alles andere, was für die FSOs innerhalb des AppleScript- Codes getan werden muss, programmgesteuert auszuführen . (Was natürlich eine zusätzliche Codierung erfordert.)
@ user3439894 Danke für die Erklärung. Es ergibt Sinn.
@ user3439894 Der Grund, warum ich die Originale ändere, ist, dass ich aufzeichnen muss, welche Dateien verarbeitet wurden, da mein Workflow den Namen entfernt und nur das hinterlässt, was wie zufällige Zeichen aussieht. Wenn Sie einen alternativen Vorschlag zum Nachverfolgen der bereits verarbeiteten Originaldateien haben, bin ich für Vorschläge offen.
Ich weiß nicht, ob Sie die Antwort gesehen haben, die ich ursprünglich gepostet habe, aber ich habe sie aktualisiert, aktualisierten Code für die Aktion Shell-Skript ausführen im ursprünglichen Automator-Workflow hinzugefügt und einen zweiten Automator-Workflow hinzugefügt. Lesen Sie einfach den Abschnitt unter Update: New code for Run Shell Script action: und auch unter Second Automator Workflow für weitere Details.

Antworten (1)

Es ist immer noch nicht ganz klar, was Sie erreichen möchten, aber hier ist ein Beispiel- Workflow , den Sie vielleicht nützlich finden.

Erster Automator-Workflow

  • Aufgeteilt in zwei Arbeitssegmente:

Erstes Segment:

  • Fragen Sie nach Finder-Objekten
  • Finder-Objekte umbenennen: Text hinzufügen
  • Kopieren Sie Finder-Elemente
  • Führen Sie das Shell-Skript aus
    • Einstellungen: Shell: bin/bash und Eingabe übergeben: als Argumente
      • Ersetzen Sie den Standardcode durch den unten stehenden Code .
      • Dies wird verwendet, um bis einschließlich des $ im Basisnamen des Dateinamens zu entfernen .

Code für die Aktion "Shell-Skript ausführen ":

cd "$(dirname "$1")"
for f in "$@"
do
    mv "$(basename "$f")" "$(printf "$(basename "$f")" | sed -E 's/^.*\$//')"
done
echo "$(ls -1)"
  • Hinweis: Der echo "$(ls -1)" Befehl ist in diesem Anwendungsfall nicht wirklich erforderlich und wurde in diesem Beispiel nur verwendet, um anzuzeigen, dass die Dateinamen geändert wurden, und um dies im Ergebnisbereich anzuzeigen .

  • Update: Neuer Code für die Aktion Shell-Skript ausführen : Verwenden Sie diesen Code anstelle des ursprünglichen Codes oben. Ich habe es so modifiziert, dass es etwas effizienter ist , einmal statt zweimal anrufen zu müssen. (Ich habe den Code in der Aktion Shell-Skript ausführen im Originalbild unten nicht aktualisiert.)

    basename

    cd "$(dirname "$1")"
    for f in "$@"; do
        n="$(basename "$f")"
        mv "$n" "$(printf "$n" | sed -E 's/^.*\$//')"
    done
    echo "$(ls -1)"
    
  • Hinweis: Siehe auch den zweiten Automator- Workflow , der nach dem Originalbild unten gezeigt wird, der die Notwendigkeit des zweiten Segments negiert: , da seine Run Shell Script- Aktion so codiert ist, dass sie die Umbenennung handhabt, die im zweiten Segment stattfindet, Hinzufügen prefix-und -procAustauschen -suffix.


Zweites Segment:

  • Fragen Sie nach Finder-Objekten
    • Optionen: [√] Eingabe dieser Aktion ignorieren
      • Wenn Sie diese Option aktivieren, sehen Sie im Bild unten, dass es eine gewollte Trennung zwischen der vorherigen Aktion und dieser gibt.
  • Finder-Objekte umbenennen: Text hinzufügen
  • Finder-Objekte umbenennen: Text hinzufügen

Siehe das Bild unten für andere anwendbare Einstellungen von Automator- Aktionen , wie im OP gezeigt.

Wie Sie im Bild unten sehen können, wurden alle Aktionen erfolgreich abgeschlossen und wie programmiert durchgeführt, wobei der Ergebnisbereich jeder Aktion die Ergebnisse ihrer Aktion anzeigt .


Erster Automator-Workflow



Zweiter Automator-Workflow

Anstelle des First Automator Workflow zu verwenden.

  • Fragen Sie nach Finder-Objekten
  • Finder-Objekte umbenennen: Text hinzufügen
  • Kopieren Sie Finder-Elemente
  • Führen Sie das Shell-Skript aus
    • Einstellungen: Shell: bin/bash und Eingabe übergeben: als Argumente
      • Ersetzen Sie den Standardcode durch den Code unter dem Bild.

Zweiter Automator-Workflow

  • Die Ergebnisse der ersten drei Aktionen in diesem zweiten Automator- Arbeitsablauf sind genau die gleichen wie im ersten Arbeitsablauf oben, daher habe ich den Ergebnisbereich für diese Aktionen ausgeblendet gelassen . Der Ergebnisbereich für die Aktion Shell-Skript ausführen zeigt jedoch die gewünschten Ergebnisse an.

Code für die Aktion Shell-Skript ausführen im zweiten Automator-Workflow:

p='prefix-'
s='-suffix'
t='-proc'

cd "$(dirname "$1")"
for f in "$@"; do
    n="$(basename "$f")"
    if [[ $n =~ ^.*\$.*${t}\.${n##*.} ]]; then
        mv "$n" "${p}$(printf "${n%.*}" | sed -E -e "s/$t/$s/" -e 's/^.*\$//').${n##*.}"
    fi
done
echo "$(ls -1)"
  • Update-Hinweis: Ich habe den Code geändert , indem ich die Variablenzuweisungen außerhalb der for Schleife platziert habe , da dies der einzige Code ist , den Sie nach Bedarf ändern sollten/wollen (und sie müssen nicht innerhalb der for Schleife sein ). Ich habe das Bild des Automator- Workflows nicht aktualisiert , um dieses Update widerzuspiegeln.

Sie könnten, falls erforderlich/gewünscht, diesem zweiten Workflow ein anderes zweites Segment hinzufügen , aber der Code in dieser Aktion Shell-Skript ausführen macht die beiden Aktionen Rename Finder Items: Add Text überflüssig , die sich im zweiten Segment des ersten ( Original), Arbeitsablauf .

Hinweis: Ich werde dies mit einer Erklärung darüber aktualisieren, was der Code in der Aktion Run Shell Script tut , sobald ich kann.

Die zweite Workflow-Automatisierung erledigt definitiv den Job. Ich verstehe auch, warum Sie der Meinung waren, dass ich zu viele Schritte hatte, wenn man bedenkt, dass der Rest der Umbenennung in einem Skript hätte erfolgen können. Danke schön.
@Yazmin, ich hatte noch keine Zeit, die Antwort mit einer Erklärung zu aktualisieren, was der Code im Bash-Skript tut, werde es aber tun, sobald ich eine Chance habe. Es genügt zu sagen, dass Sie nur den Wert der drei Variablen p und nach Bedarf/Wunsch ändern müssen . Der verbleibende Code sollte nicht geändert werden müssen. st
@Yazmin, Update-Hinweis: Ich habe den Code im zweiten Automator- Workflow geändert , indem ich die Variablenzuweisungen außerhalb der for Schleife platziert habe , da dies der einzige Code ist , den Sie nach Bedarf ändern sollten/wollen (und das tun sie nicht müssen innerhalb der for Schleife sein ). Ich habe das Bild des Automator- Workflows nicht aktualisiert , um dieses Update widerzuspiegeln.