Пакетное переименование папок в AppleScript изменит только имена всех остальных папок

Я пытаюсь написать скрипт, который переименовывает папки в подпапках. Другими словами, таксономия будет идти от:

Directory/Company X/1
Directory/Company X/2
Directory/Company X/3
Directory/Company X/4
Directory/Company X/5
Directory/Company X/6
Directory/Company X/7
Directory/Company X/8
Directory/Company X/9
Directory/Company X/10
Directory/Company X/info

to

Directory/Company X/Project 1_1
Directory/Company X/Project 2_2
Directory/Company X/Project 3_3
etc..

Пока у меня есть:

tell application "Finder"

-- Defining Pro Folders 
set pro_folder to folder POSIX file "/Users/Jart/Desktop/test"
set all_pro_folders to every folder of pro_folder

-- Iterate through folders and check if folder name is greater than one character
repeat with x in all_pro_folders
    repeat with y in x
        -- Convert the folder name to a string and check if that string is longer than one character
        set incomingName to folder ((y as alias) as text)
        set incomingNameString to name of incomingName
        if length of incomingNameString = 1 then
            -- Set old name (number) to a new variable
            set oldname to folder ((y as alias) as text)
            set oldnameString to name of oldname
            -- Do it again for the second part
            set oldname2 to folder ((y as alias) as text)
            set oldnameString2 to name of oldname2
            -- Rename here
            set name of y to "Project" & " " & oldnameString & "_" & oldnameString
        end if
    end repeat
end repeat

end tell

Однако теперь папка выглядит так:

Directory/Company X/3
Directory/Company X/5
Directory/Company X/7
Directory/Company X/9
Directory/Company X/10
Directory/Company X/info
Directory/Company X/Project 1_1
Directory/Company X/Project 2_2
Directory/Company X/Project 4_4
Directory/Company X/Project 6_6
Directory/Company X/Project 8_8

Почему оно это делает? Как изменить этот код, чтобы он переименовал все файлы? Если хотите, я могу сделать дамп журнала событий/ответов.


person Jarrett G.    schedule 27.08.2013    source источник
comment
есть ли причина, по которой это помечено vba? я не вижу(?)   -  person enderland    schedule 28.08.2013
comment
разве applescript не имеет ничего общего с vba?   -  person Jarrett G.    schedule 28.08.2013
comment
jart, vba не имеет ничего общего с applescript, лучше не использовать этот тег в этих вопросах.   -  person adamh    schedule 28.08.2013
comment
мой плохой ... извините, я задавал так много вопросов в последнее время. я обещаю, что это будет мой последний на некоторое время   -  person Jarrett G.    schedule 28.08.2013


Ответы (1)


Jart, основная проблема была со вторым циклом, вместо этого вам нужно перебирать каждую папку переменной папки x. Похоже, что зацикливание папки сработало, но когда вы их переименовали, это вызвало проблему с индексом, в результате чего читалась только каждая вторая папка.

Вот небольшая доработка.

  • переименовал ваши переменные из y и x, чтобы они были менее загадочными.
  • изменил тест длины, чтобы поддерживать имена> 9.
  • я не был уверен в элементе в конце нового имени и в том, должно ли вместо этого быть увеличенное число. (вы можете легко вернуться)
  • оставленный в некоторых вызовах журнала для справки, это может помочь в отладке
tell application "Finder"
    -- Defining Pro Folders 
    set pro_folder to folder POSIX file "/Users/Jart/Desktop/test"
    set all_pro_folders to every folder of pro_folder

    -- Iterate through folders and check if folder name is greater than one character
    repeat with parent_folder in all_pro_folders
        set counter to 0 -- reset a counter variable we use for the end of the name 
        set child_folders to every folder of parent_folder
        repeat with current_folder in child_folders
            set fold_name to the name of current_folder
            log (fold_name)
            if (the length of fold_name < 3) then -- this will allow names > 9  
                set counter to counter + 1 -- increment the counter every time we find valid folder
                set new_name to "Project" & " " & fold_name & "_" & counter
                log (new_name)
                set the name of current_folder to new_name
            end if
        end repeat
    end repeat
end tell

ХТН

person adamh    schedule 28.08.2013
comment
Спасибо еще раз! Очень ценю, что ты помогаешь мне. Для справки в будущем, где было бы хорошо узнать больше об AppleScript? Это кажется невероятно полезным. Есть ли еще какой-нибудь глоссарий? - person Jarrett G.; 28.08.2013
comment
Не волнуйтесь. Я бы сказал, продолжайте делать то, что делаете, пытаясь автоматизировать и решать проблемы, копировать и читать другие сценарии Apple. Руководство по языку Applescript является хорошим справочником: developer.apple .com/library/mac/documentation/AppleScript/. Или проверьте Amazon для книги обзорного типа и, конечно же, Google ;-) - person adamh; 30.08.2013