So kombinieren Sie die Funktion "Ordner auswählen" mit der Funktion "Ordnerelemente hinzufügen" mit Applescript

Ich verwende eine Ordneraktion, um einen "Hot"-Ordner zu erstellen, der die in diesem Ordner abgelegten Dateien sofort in einen bestimmten Sicherungsordner dupliziert.

Dies ist das Skript, das ich als Ordneraktion verwende und es funktioniert gut:

on adding folder items to this_folder after receiving these_items
   tell application "Finder" to duplicate these_items to folder 
   ("Macintosh HD:Users:photograper:Desktop:Target:")
end adding folder items to

Aber ich möchte diese Ordneraktion wie ein normales Applescript ausführen und die Funktion "Ordnerelemente hinzufügen" mit einem Befehl "Ordner auswählen" auslösen. So kann ich manuell auf einen bestimmten Quell- und Zielordner verweisen und das Skript zum Laufen bringen.

Ich habe das versucht, aber kein Ergebnis:

set this_folder to choose folder with prompt "Select source folder:" 
with multiple selections allowed
set target_folder to choose folder with prompt "Select backup folder:"


on adding folder items to this_folder after receiving these_items
   tell application "Finder" to duplicate these_items to target_folder
end adding folder items to

Irgendwelche Vorschläge, wie man die beiden Teile des Scriptings miteinander kombinieren kann, damit sie interagieren können?

Danke!

Patrick

Antworten (2)

Entfernen Sie einfach den Handler und ändern Sie die Variable „these_items“ für „this_folder“ wie folgt:

set this_folder to choose folder with prompt "Select source folder:" with multiple selections allowed
set target_folder to choose folder with prompt "Select backup folder:"

tell application "Finder" to duplicate this_folder to target_folder

Führen Sie das Skript dann als normales Skript aus und es kopiert den Ordner vollständig an Ihr Ziel.

Wenn Sie hingegen nur die Elemente kopieren möchten (nicht den Ordner), können Sie diese Variante verwenden:

set this_folder to choose folder with prompt "Select source folder:" with multiple selections allowed
set target_folder to choose folder with prompt "Select backup folder:"

tell application "Finder"
    set these_items to list folder of this_folder without invisibles
    repeat with i from 1 to count of these_items
        set ItemX to item i of these_items
        set ItemX to (this_folder & ItemX as string) as alias
        duplicate ItemX to target_folder
    end repeat
end tell

In beiden Fällen würden Sie am Ende ein Duplikat des Inhalts des Ordners erhalten.

Angesichts Ihrer Kommentare unten führt diese Version das Skript als Ordneraktion aus, erinnert sich jedoch an Ihren Zielordner, wenn Sie am Anfang des Skripts eine Eigenschaft deklarieren. Wenn Sie das Skript neu kompilieren, werden Sie erneut gefragt.

property target_folder : ""

on adding folder items to this_folder after receiving these_items
    if target_folder = "" then
        set target_folder to ¬
            choose folder with prompt "Select source folder:" with multiple selections allowed
    else
        try
            --if the script has a property that has been deleted (i.e., the destination folder), it will cause 
            --an error that resolves by asking for a new folder
            set target_folder to target_folder as alias
        on error
            set target_folder to ¬
                ¬
                    choose folder with prompt "Select source folder:" with multiple selections allowed
        end try
    end if
    tell application "Finder" to duplicate these_items to folder target_folder
end adding folder items to

Ich hoffe das hilft.

Vielen Dank für Ihre Antwort. Ich möchte die Ordneraktion mit den Anweisungen zum Hinzufügen von Ordnerelementen verwenden. Wenn eine Datei in dem Ordner abgelegt wird, möchte ich, dass sie sofort in einen Zielordner dupliziert wird. Das ist es, was ich möchte. Ich habe versucht, den Befehl "Ordner auswählen" zum Festlegen des Ziels zu setzen. Ordner innerhalb der 2 Anweisungen, aber jedes Mal, wenn eine Datei abgelegt wird, wird das "Fenster auswählen" ausgelöst. Gibt es eine Möglichkeit, den Zielordner einmalig festzulegen? die von jeder Datei verwendet wird, die im Quellordner abgelegt wird? Danke!
Folgendes habe ich versucht: Beim Hinzufügen von Ordnerelementen zu this_folder nach dem Erhalt von these_items setze target_folder, um einen Ordner mit der Aufforderung „Select backup folder:“ auszuwählen
Entschuldigung, ich habe es falsch verstanden, als Sie sagten, dass Sie "als normales Applescript" ausführen wollten. Wenn Sie also möchten, dass das Fenster zum Auswählen des Ordners nur einmal angezeigt wird und von da an denselben Ordner verwendet, deklarieren Sie eine Eigenschaft am Anfang des Skripts. Siehe die bearbeitete E-Mail oben.
Ja! Genau das meinte ich und es funktioniert. Ich habe die "wenn - dann"-Anweisung schon einmal ausprobiert, wusste aber am Anfang nichts über die Eigenschaft. Vielen Dank!
Gibt es eine Möglichkeit, den Zielordner jedes Mal festzulegen, wenn ich das Skript für einen anderen Ordner verwende oder wenn ich den Zielordner lösche? Ohne das Skript neu zu kompilieren? Im Moment erinnert es sich, wie Sie sagten, an den Zielordner, auch wenn ich den Zielordner gelöscht habe. Danke!
Wenn Sie den Ordner löschen, ja. Ich werde das Skript in einer Minute bearbeiten, aber ich verstehe Ihren Kommentar zu "jedes Mal, wenn Sie das Skript in einem anderen Ordner verwenden" nicht. Meinst du, wenn du den Quellordner änderst, sollte sich auch das Ziel ändern? (Oh, und macht es Ihnen etwas aus, die Frage als beantwortet zu stellen?)
In meiner Situation verwende ich für jedes Fotoshooting einen neuen Ordner, den ich mit dem Skript auslösen werde. Für den Zielordner arbeite ich mit mehreren externen Laufwerken. Es kann also sein, dass ich auf einen neuen Zielordner verweisen muss, wenn ich ein anderes externes Laufwerk für die Sicherung verwende. Ich habe Ihr neues Skript gesehen, ich denke, das ist es! Werde es morgen testen. Vielen Dank für Ihren Beitrag!
Entschuldigung @MBUST Es funktioniert nicht. Wenn ich es zum ersten Mal starte, macht es, was ich will. Aber wenn ich den Zielordner lösche und das Skript erneut in einem neuen Ordner auslöse, fragt es nicht nach einem neuen Zielordner. Selbst wenn der Zielordner gelöscht wird, scheint er sich daran zu erinnern. Ich habe ein paar Dinge ausprobiert. kann aber nicht erkennen was da schief läuft.
Du hast Recht. Ich habe das Skript einfach mit und ohne die Ordneraktion ausgeführt. Wenn sich der Ordner ohne die Ordneraktion im Papierkorb befindet, generiert das Skript wie gewünscht einen Fehler. Wenn das Skript als Ordneraktion angehängt ist, wird die Duplizierung einfach übersprungen und das Skript wird stillschweigend beendet, als ob es gut funktioniert hätte (aber natürlich nichts dupliziert hätte). Ich habe im Moment keine Zeit, mich darum zu kümmern, aber wenn ich es später tun sollte, werde ich es untersuchen.

@Patrick de Gier, diese geänderte Version des Codes von @MBUST , ermöglicht es dem Benutzer, jedes Mal einen Zielordner auszuwählen

on adding folder items to this_folder after receiving these_items
    set target_folder to choose folder with prompt "SELECT TARGET FOLDER:" with multiple selections allowed
    tell application "Finder" to duplicate these_items to folder target_folder
end adding folder items to
Ich habe es versucht. Aber dann fragt das Skript jedes Mal nach einem Zielordner, wenn eine Datei in dem Ordner abgelegt wird. Was ich suche, ist eine Variante, die beim ersten Ausführen des Codes nach der Auswahl eines Zielordners fragt (wie die Variante von MBUST). Aber wenn sich der Zielordner ändert. Wenn ich zum Beispiel an einem Tag eine externe Festplatte als Backup verwende und an einem anderen Tag eine andere externe HD als Backup (für Fotoshootings), möchte ich, dass das Skript erkennt, dass der Zielordner fehlt, und dass es Sie auffordert, ein neues Ziel festzulegen Ordner. Weiß nicht, ob es möglich ist. Danke!
Sorry für die Unklarheiten Jungs! schätze wirklich all Ihre Hilfe
Eine Variante meiner letzten Iteration soll als Modell dienen, wenn entweder der Ziel- oder der Zielordner fehlt. Und wenn sie nicht fehlen, verwendet das Skript die gespeicherte Eigenschaft. Speichern Sie also jede Ordnervariable als separate Eigenschaft am Anfang des Skripts, wie ich Ihnen in meinem obigen Skript gezeigt habe. Verwenden Sie das als Modell und Sie werden genau das bekommen, was Sie wollen.