Я столкнулся с определенной проблемой с большим сценарием, который я пишу. Я пытаюсь переименовать все файлы в папке с префиксом «temp_», и при этом псевдоним этого файла по-прежнему может быть адресован из AppleScript после того, как префикс был добавлен в файл. Следующий код работает на НЕКОТОРЫХ машинах, но не на других. Я пробовал его на MBP 2018 года с 10.13, Mac Mini 2012 года с 10.13 и iMac 2015 года с 10.13 и 10.14. iMac — единственная машина, у которой есть проблема с этим кодом:
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
Код дает сбой на НЕКОТОРЫХ машинах, когда я пытаюсь преобразовать псевдоним в путь posix. На машинах, на которых работает этот сценарий, в диалоговом окне тестового отображения указан псевдоним файла с новым именем. Итак, foo.txt становится temp_foo.txt. На машинах, на которых сценарий не работает, диалоговое окно дисплея возвращается только с foo.txt в качестве имени файла.
На машине, на которой это не удается, файл будет переименован в temp_foo.txt, как и должно быть, но псевдоним никогда не обновляется, поэтому он по-прежнему думает, что это просто файл foo.txt. На неисправных машинах последняя команда для установки переменной в posix-путь псевдонима завершается ошибкой, потому что псевдоним неверен, поскольку он все еще указывает на старое имя файла.
Если нужно, я просто переименую все файлы в одном цикле, затем вернусь и получу пути posix в другом цикле, так как делаю новый
set theTempFiles to files of (item 1 of theSelection)
Должен получить новый список файлов, теперь с их префиксом «temp_». Но мне больно вводить повторный цикл, который я не считаю действительно необходимым, поскольку на некоторых машинах код работает ОТЛИЧНО.
Кто может помочь мне заставить мой код работать нормально, а кто может сделать так, чтобы он не работал? Я просто хотел бы увидеть, насколько это большая проблема. Также было бы неплохо, если бы кто-нибудь мог сказать мне, что я делаю что-то ужасно неправильное в своем коде, и поэтому я получаю непредсказуемые результаты.
Я думаю, что это где-то сломалось, так как alias
предполагается, что это ссылка на элемент файла, который остается действительным, даже если он будет переименован или перемещен. Если вы все равно собираетесь использовать пути POSIX, вы можете взглянуть на использование NSURL
класса Cocoa (через какой-либо AppleScriptObjC), чтобы отслеживать ссылки на файлы, поскольку в конечном итоге это то, что используется (или должно использоваться).
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
Солнечный Майк
Крис Норман
red_menace
alias
ссылка на файл, который не изменится, даже если он будет перемещен или переименован, но похоже, что он где-то сломался. Если вы в конечном итоге собираетесь использовать пути POSIX, вы можете взглянуть на использование NSURL через какой-нибудь AppleScriptObjC.Крис Норман
red_menace