Apple Script - папка поиска и переименование файлов - PullRequest
0 голосов
/ 23 ноября 2018

Мне нужна помощь с дополнением к большему сценарию яблока, я видел много похожих запросов, но ни один из них не отвечал всем требованиям, поэтому, если кто-нибудь сможет помочь или направить меня к ответу, это будет огромной помощью

Я хочу следовать этой общей предпосылке

`« Выберите имя », ответ по умолчанию« »установите для ChosenName текст, возвращаемый из результата

установите для ImagesFolder (выберите папку с подсказкой« Выбрать »Папка с изображениями: ”)`

Бит, который я борюсь с

, если в папке ImagesFolder есть папка с именем «Набор изображений 1», а затем просмотрите папку «Набор изображений 1».»И переименуйте содержимое, используя эту логику

, если имя файла содержит 0001_ переименовать файл в ChosenName &« front »

, если имя файла conatins 0002_ переименовать файл в ChosenName &« Back »

если имя файла conatins 0003_ переименовать файл в ChosenName & «Top»

если имя файла conatins 0004_ переименовать файл в ChosenNamet & «Bottom»

else

, если ImagesFolder содержит папку с именем «Набор изображений 2», затем просмотрите изображения папки 2 и переименуйте содержимое, используя эту логику

, если имя файла содержит 0001_ переименовать файл в ChosenName & «F”

, если имя файла conatins 0002_ переименовать файл в ChosenName &« B »

, если имя файла conatins 0003_ переименовать файл в ChosenName &« T »

, если имя файла conatins 0004_переименуйте файл в ChosenNamet & «B»

(Unqiue символы, которые я использую для идентификации этих файлов, всегда последние символы, если это помогает)

Спасибо P

1 Ответ

0 голосов
/ 23 ноября 2018

Этот скрипт делает то, что вам нужно.Вам необходимо расширить его, чтобы он также управлял папкой «Набор изображений 2» и ее именем расширения, но будет достаточно легко просто скопировать то, что находится внутри блока Tell «Finder».

Поскольку у вас несколько папок, я использовал подпрограмму для обработки вашей папки, каждый раз вызывая новое правило.Например, 1-е правило заключается в обработке «набора изображений 1, поиск 0001 0002 0003 0004 и замене каждого из них на передний, задний, верхний, нижний.

Правило 2 заключается в обработке» набора изображений 2, найдите 0001,0002,0003,0004 и замените каждый на F, B, T, B.

Первая часть строит правила.Сам скрипт сводится к циклу по каждому правилу, вызывая подпрограмму «Process_SubFolder» с 3 переменными: имя подпапки, текущие цели и новые имена.

(* 
Define record Rule, made of 3  variables : 
   NFolderNFolder: the name of sub-folder
   NSource : the list of part of file names to be processed
   NDest : the list of new names. This list MUST count same number of items as NSource       
All rules are added into ListRules
*)
global ChosenName, ImagesFolder -- mandatory to use in the sub-routine

set Rule to {NFolder:"Image Set 1", NSource:{"0001", "0002", "0003", "0004"}, NDest:{"Front", "Back", "Top", "Bottom"}}
set ListRules to {Rule}
set Rule to {NFolder:"Image Set 2", NSource:{"0001", "0002", "0003", "0004"}, NDest:{"F", "B", "T", "B"}}
set ListRules to ListRules & {Rule}


set R to display dialog "Enter a name" default answer ""
set ChosenName to text returned of R
if ChosenName is "" then return -- no name selected, end of script

set ImagesFolder to choose folder with prompt "Choose Images Folder:"
repeat with aRule in ListRules
    Process_SubFolder(NFolder of aRule, NSource of aRule, NDest of aRule)
end repeat
-- end of main script


on Process_SubFolder(LFolder, LSource, LDest)
    tell application "Finder"
        set SubFolder to (ImagesFolder as string) & LFolder
        if folder SubFolder exists then
            set FileList to every file of folder SubFolder -- get all files of Images Set 1
            repeat with aFile in FileList -- loop through each file
                set FName to name of aFile
                set NewName to ""

                -- Manage extension of the file
                if name extension of aFile is "" then
                    set NewExt to ""
                else
                    set NewExt to "." & name extension of aFile
                end if

                repeat with I from 1 to count of LSource --loop trhough each source of the rule
                    if FName contains (item I of LSource) then set NewName to ChosenName & (item I of LDest) & NewExt
                end repeat
                if NewName is not "" then set name of aFile to NewName -- only if name must be changed !
            end repeat -- loop through files of LFolder
        end if -- folder exists
    end tell
end Process_SubFolder

С помощью этой структуры вы можетедобавьте столько правил, сколько хотите!

Конечно, я предполагаю, что вы никогда не получите дважды одинаковые имена в подпапке!Это не так в Image Set 2, где у вас будет 2 файла с новым именем = ChosenNameB: это создаст ошибку !!

...