Проблемы с копированием папок с изображениями в другую папку с помощью Applescript - PullRequest
0 голосов
/ 05 февраля 2020

Я получаю сообщение об ошибке из-за невозможности сделать псевдоним ... целому числу? Не уверен ...

Я пытаюсь заставить этот фрагмент взять несколько папок (в каждой из которых есть куча изображений) и скопировать содержимое на архивный диск.

on open droppedItems

    set user to do shell script "whoami"
    set archivePath to "/Users/" & user & "/Desktop/Archive' 'Drive"

    #tell application "Finder" to set jobName to name of item droppedItems
    #I need to figure this out as it's not working the way I originally had it

    tell application "Finder"
        do shell script "mkdir -p " & archivePath & "/" & jobName & "RAW' 'FILES"
        set localDestination to archivePath & "/" & jobName & "RAW' 'FILES"
        do shell script "open " & localDestination
        activate
        set position of window 1 to {1000, 0}
    end tell

    **#this is where I'm having issues (obviously)**
    repeat with i from 1 to count of droppedItems
        set currentItem to item i of droppedItems
        #display dialog (currentItem)
        duplicate currentItem to localDestination #I've tried a few different things here...
    end repeat
end open

1 Ответ

1 голос
/ 05 февраля 2020

В коде много проблем.

Наиболее значимыми являются

  1. droppedItems - это список элементов. Чтобы получить имя, вы должны использовать один элемент.
  2. Средство поиска принимает только пути HFS (разделенные двоеточиями), и вы даже пытаетесь скопировать файлы в буквальную строку. С помощью пути HFS вам не нужно экранировать символы пробела. В строке do shell script путь экранируется с помощью quoted form of.
  3. Команда duplicate принадлежит Искателю. Он должен быть заключен в блок tell application "Finder".

Окно Finder не имеет значения. Вы можете дублировать элементы без открытого окна. Однако я добавил строку, чтобы открыть папку. И вам не нужно повторять l oop.

on open droppedItems

    set archivePath to (path to desktop as text) & "Archive Drive"
    tell application "Finder" to set jobName to name of first item of droppedItems
    set localDestination to archivePath & ":" & jobName & "RAW FILES"
    do shell script "mkdir -p " & quoted form of POSIX path of localDestination
    tell application "Finder"
        duplicate droppedItems to folder localDestination
        open folder localDestination
    end tell

end open

Если вы хотите дублировать только содержимое папок, вам действительно нужен повтор l oop

on open droppedItems

    set archivePath to (path to desktop as text) & "Archive Drive"
    tell application "Finder" to set jobName to name of first item of droppedItems
    set localDestination to archivePath & ":" & jobName & "RAW FILES"
    do shell script "mkdir -p " & quoted form of POSIX path of localDestination
    tell application "Finder"
        repeat with anItem in droppedItems
            if class of anItem is folder then
                duplicate every item of anItem to folder localDestination
            else
                duplicate anItem to folder localDestination
            end if
        end repeat
        open folder localDestination
    end tell

end open
...