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.
Ich denke, das ist irgendwo kaputt gegangen, da an alias
ein 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- NSURL
Klasse (ü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
Solar-Mike
Chris Norman
rote_bedrohung
alias
soll 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.Chris Norman
rote_bedrohung