Applescript-Probleme beim Umbenennen einer Datei und beim Ändern des Aliasnamens

Ich bin bei einem größeren Skript, das ich schreibe, auf ein bestimmtes Problem gestoßen. Ich versuche, alle Dateien in einem Ordner mit dem Präfix "temp_" umzubenennen und dabei den Alias ​​​​zu dieser Datei immer noch von AppleScript aus ansprechbar zu machen, nachdem das Präfix zur Datei hinzugefügt wurde. Der folgende Code funktioniert auf EINIGEN Computern, auf anderen nicht. Ich habe es auf einem 2018er MBP mit 10.13, einem 2012er Mac Mini mit 10.13 und einem 2015er iMac mit 10.13 und 10.14 ausprobiert. Der iMac ist die einzige Maschine, die Probleme mit diesem Code hat:

tell application "Finder"
set theSelection to the selection -- so you must have a folder with files selected in Finder before running this code.
set theFiles to the files of (item 1 of theSelection) --get the files
end tell
repeat with f from 1 to (count theFiles)
    set aItem to item f of theFiles -- set a variable as an individual file
    set pdfName to name of aItem --get the name of that file
    set aliasItem to aItem as alias -- get the alias of the file
    tell application "Finder"
        set the name of aliasItem to (("temp_" & (name of aliasItem)) as string) --rename the file
    end tell
    display dialog (aliasItem as string) buttons {"Cancel", "OK"} default button "OK" --this is just here for testing the script, to see what the system still thinks the file is named
    set posixPath to (POSIX path of aliasItem) --THIS is where the code fails on some machines. 
end repeat

Der Code schlägt auf EINIGEN Maschinen fehl, wenn ich versuche, den Alias ​​in einen Posix-Pfad umzuwandeln. Auf den Computern, auf denen dieses Skript funktioniert, listet der Testanzeigedialog den Dateialias mit dem neuen Namen auf. Aus foo.txt wird also temp_foo.txt. Auf den Computern, auf denen das Skript fehlschlägt, wird der Anzeigedialog nur mit foo.txt als Dateiname zurückgegeben.

Auf der Maschine, auf der dies fehlschlägt, wird die Datei in temp_foo.txt umbenannt, wie es sein sollte, aber der Alias ​​wird nie aktualisiert, sodass er immer noch denkt, dass die Datei nur foo.txt ist. Auf den fehlerhaften Maschinen schlägt der letzte Befehl zum Festlegen der Variablen auf den Posix-Pfad des Alias ​​fehl, da der Alias ​​falsch ist, da er immer noch auf den alten Dateinamen zeigt.

Wenn es sein muss, werde ich einfach alle Dateien in einer Schleife umbenennen, dann zurückkommen und die Posix-Pfade in einer anderen Schleife abrufen, da ich eine neue mache

set theTempFiles to files of (item 1 of theSelection)

Sollte eine neue Liste der Dateien erhalten, jetzt mit ihrem Präfix "temp_". Aber es schmerzt mich, eine Wiederholungsschleife einzufügen, die meiner Meinung nach nicht wirklich notwendig ist, da der Code auf einigen Maschinen FEIN funktioniert.

Wer kann mir helfen, meinen Code zum Laufen zu bringen, und wer kann ihn zum Scheitern bringen? Ich würde nur gerne sehen, wie groß das Problem ist. Es wäre auch nett, wenn mir jemand sagen könnte, dass ich in meinem Code etwas schrecklich falsch mache und deshalb unvorhersehbare Ergebnisse erhalte.

Warum nicht den Alias ​​löschen, die Originaldatei umbenennen und dann einen neuen Alias ​​mit dem korrekten neuen Dateinamen erstellen?
Es ist kein echter Alias, wie Sie ihn im Dateisystem sehen würden. In AppleScript gibt es mehrere Möglichkeiten, Dateien zu referenzieren, und Alias ​​ist eine dieser Möglichkeiten. Ich bin mir nicht sicher, wie ich es besser beschreiben könnte. Wenn also das Skript fehlschlägt, versucht es, diesen "Alias" in einen Posix-Pfad zu konvertieren, aber der Alias ​​(Verweis auf die Datei) hat den Namen der Datei nicht in der Referenz selbst aktualisiert. Der "Alias" bezieht sich also immer noch auf den alten Namen der Datei.
Lassen Sie mich raten - die Mojave-Maschine ist diejenige mit dem Problem? An aliassoll ein Verweis auf die Datei sein, die sich nicht ändert, selbst wenn sie verschoben oder umbenannt wird, aber es sieht so aus, als wäre sie irgendwo kaputt gegangen. Wenn Sie letztendlich POSIX-Pfade verwenden, können Sie sich die Verwendung von NSURL über einige AppleScriptObjC ansehen.
Nun, eine der Maschinen ist eine 10.13-Maschine, die Probleme hat. Ich habe das Skript gerade auf 3 verschiedenen 10.12-Rechnern ausprobiert und es hat auf allen funktioniert. Aber ich habe eine VM, die ich auf zwei verschiedenen Computern mit 10.15 darauf ausprobiert habe, und das Skript ist auf der VM auf zwei verschiedenen Computern (2018 MBP und 2015 iMac) fehlgeschlagen. Kann man den Namen einer Datei über die NSURL in ASObjC ändern? Ich weiß sehr wenig über ASObjC und bin ein wenig eingeschüchtert davon.
Sie können normales AppleScript für die Namensänderung verwenden und einfach NSUrl verwenden, um die Dateireferenzen zu verfolgen. Ich werde eine Antwort mit einem Beispiel posten.

Antworten (1)

Ich denke, das ist irgendwo kaputt gegangen, da an aliasein Verweis auf ein Dateielement sein soll, das gültig bleibt, auch wenn es umbenannt oder verschoben wird. Wenn Sie sowieso POSIX-Pfade verwenden, können Sie sich die Verwendung der Cocoa- NSURLKlasse (über AppleScriptObjC) ansehen, um die Dateireferenzen zu verfolgen, da dies letztendlich das ist, was verwendet wird (oder verwendet werden soll).

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

tell application "Finder" -- get the selection
    set theSelection to selection
    set theFiles to the files of (first item of theSelection) as alias list
end tell

repeat with anItem in theFiles
    set anItem to POSIX path of anItem
    set fileRefURL to (current application's NSURL's fileURLWithPath:anItem)'s fileReferenceURL() -- get file reference from path
    tell application "System Events" to set the name of disk item anItem to "temp_" & (name of disk item anItem)
    set posixPath to (fileRefURL's |path|()) as text -- get path from file reference
    display dialog "Before:" & return & anItem & return & return & "After:" & return & posixPath buttons {"Cancel", "OK"} default button "OK"
end repeat