Использование яблочного сценария для перемещения файлов, имена которых отображаются в таблице 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