Использование яблочного сценария для перемещения файлов, имена которых отображаются в таблице Excel

У меня есть папка с около 4000 файлов изображений. Мне нужно выбрать некоторые из этих файлов в зависимости от того, появляются ли их имена в электронной таблице Excel, и скопировать их в новую папку. Если возможно, я также хотел бы пометить их цветной меткой, чтобы я знал, какие файлы в исходной папке были перемещены, а какие - нет. Я получил код ниже отсюда.

tell application "Microsoft Excel"
tell worksheet 1 of active workbook
    set fileList to value of used range
end tell
end tell

set rootFolder to "path/to/sourcefolder" as POSIX file
set filesToMove to {}
repeat with thisItem in fileList
try
    set end of filesToMove to alias (rootFolder & thisItem)
on error
    display dialog "File " & thisItem & " is not in the folder"
end try
end repeat

tell application "Finder"
move filesToMove to folder "path/to/destination" as POSIX file
end tell

Когда я запускаю его, он не может найти ни одного файла. Я думаю, что проблема может быть связана с использованием / в моем пути к файлу вместо : но я не знаю, как задать путь к внешнему диску с синтаксисом appleScript. Используя то же самое объявление переменной, set rootFolder to "path/to/sourcefolder" as POSIX fileи затем говорит искателю open rootFolder работает отлично.

Мне также нужен сценарий для большей гибкости - не все файлы имеют одинаковые соглашения об именах, и поэтому он мне нужен для поиска любых файлов, имена которых содержат идентификаторы из электронной таблицы, но могут не совпадать с ним в точности. То есть запись электронной таблицы может быть "00103", но имя файла "PX00103KL.jpg".

Тем временем я создал рабочий процесс автоматизатора, который перемещает и маркирует файлы именно так, как я хочу, но только после того, как я вручную ввел строку поиска. Если бы я мог объединить эти две идеи: перебирать записи в таблице в Excel и использовать каждую из них в качестве входных данных для рабочего процесса автоматизатора, это было бы идеально.

Спасибо за любую помощь!

1 ответ

У меня нет Excel, но при условии, что вы можете получить из него список строк, здесь приведен фрагмент кода, который найдет все файлы в целевой папке, содержащие строку (и), установит для нее метку и затем скопируйте это. Измените соответственно.

Он использует инструмент командной строки Unix для внимания, mdlist найти файлы. Попытка сделать это исключительно на appleScript кажется болезненной. Команда shell при сшивании выглядит примерно так:

mdfind -onlyin ~/Documents/ "kMDItemDisplayName == '*somestring*'"

Вот код:

set stringList to {"144", "g_"}

set rootFolder to "/Users/blah/Downloads/" as POSIX file
set destFolder to "/Users/blah/Downloads/test" as POSIX file
set filesToMove to {}

set mdAtr to "\"kMDItemDisplayName == '*"

repeat with thisItem in stringList
    set sPath to quoted form of POSIX path of rootFolder
    set sName to mdAtr & thisItem & "*'\""
    set sCmd to "mdfind -onlyin " & sPath & " " & sName

    set sResults to (do shell script sCmd)

    set fList to (every paragraph of sResults) as list

    repeat with i in fList
        set f to (POSIX file i) as alias
        tell application "Finder"
            set label index of f to 3
            #copy file f to folder (destFolder as alias)
        end tell
    end repeat  
end repeat
Другие вопросы по тегам