Перемещение файла с использованием AppleScript не работает после изменения имени файла - PullRequest
1 голос
/ 20 октября 2019

Я использую AppleScript, чтобы переименовать файл и переместить его в папку. Это выполняется с помощью голосовой команды. Он не перемещает файл в папку, он нажимает Enter, переименовывает файл в «myFile», снова нажимает Enter.

Однако, если я выполню это во второй раз, или если файл называется «myFile», он будет работать. Я думаю, что код, который перемещает файл, не знает или не обновляется в имени файла. Я не знаю, как это исправить. AppleScript - не моя вещь.

tell application "System Events"
    key code 36
    keystroke "myFile"
    key code 36
end tell

tell application "Finder"
    move POSIX file "/Users/joe/Desktop/myFile.csv" to POSIX file "/Users/joe/Desktop/TestFolder" with replacing
end tell

Ответы [ 3 ]

1 голос
/ 20 октября 2019

Если файл, который вы хотите переместить, в настоящее время выбран в Finder, и вы хотели бы иметь возможность установить новое имя ... это решение может работать для вас

property moveToFolder : (path to desktop as text) & "TestFolder"

set newName to text returned of (display dialog "Name Your File" default answer ¬
    "myFile.csv" buttons {"Cancel", "OK"} ¬
    default button 2 cancel button 1 with title "Name Your File")

tell application "Finder"
    set originalFile to item 1 of (get selection) as alias
    set theFile to (move originalFile to alias moveToFolder) as alias
    if (exists of alias (moveToFolder & ":" & newName)) then ¬
        delete alias (moveToFolder & ":" & newName)
    set name of theFile to newName
end tell
0 голосов
/ 20 октября 2019

С выбранным файлом, попробуйте это:

tell application "Finder"

    set itemlist to the selection
    set theFile to (item 1 of itemlist) as alias
    set name of theFile to "myFile.csv"

    move POSIX file "/Users/joe/Desktop/myFile.csv" to POSIX file "/Users/joe/Desktop/TestFolder" with replacing

end tell
0 голосов
/ 20 октября 2019

Не выполняйте действия сценария графического интерфейса, которые могут быть заданы по умолчанию через AppleScript.

Чтобы переименовать и переместить файл, используя System Events:

tell application id "sevs"
    set base_folder to folder "~/Desktop/"
    set f_old to "myOldFile.csv" -- file to move (original name)
    set f_new to "myFile.csv"    -- new file name
    set dir to "TestFolder"      -- destination folder

    tell the base_folder 
        set the name of the file named f_old to f_new
        move the file named f_new to the folder named dir
    end tell
end tell

Дляпереименуйте и переместите файл, используя Finder:

tell application id "MACS" --OR: "com.apple.Finder"
    set base_folder to folder (POSIX file "/Users/joe/Desktop/")
    set f_old to "myOldFile.csv" -- file to move (original name)
    set f_new to "myFile.csv"    -- new file name
    set dir to "TestFolder"      -- destination folder

    tell the base_folder 
        set the name of the file named f_old to f_new
        move the file named f_new to the folder named dir with replacing
    end tell
end tell

По сути, сломав пути, как у меня, оба сценария одинаковы, за исключением значения, назначенного переменной base_folder, для которого Finder необходимо явно указать, что он имеет дело с путем к файлу в нотации posix. Кроме того, в конкретном случае, когда базовой папкой является папка рабочего стола, оба Finder и System Events должны понимать это:

set base_folder to the path to the desktop folder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...