2013-02-21 3 views
0

У меня есть несколько папок с дополнительными папками, в которых есть файлы, которые должны быть помечены родительской папкой + имя папки grandparent.Applescript для добавления папки grandparent + родительский префикс папки в filename

т.е. Папка 1> Папка 2> File.jpg должна быть переименована в Folder_1_Folder_2_File.jpg

я смог найти сценарий, который несколько делает это, и пытается перепроектировать его, но не я удачи. В приведенном ниже сценарии представлены две проблемы: 1) он включает весь путь из корневого каталога, а два, он удаляет имя файла, поэтому разрешает только один файл переименовываться до его устранения. Я знаю, что проблема в том, что скрипт переименовывает весь файл, я просто не знаю, как это сделать.

tell application "Finder" 
set a to every folder of (choose folder) 
repeat with aa in a 
    set Base_Name to my MakeBase(aa as string) 
    set all_files to (every file in aa) 
    repeat with ff in all_files 
     set ff's name to (Base_Name & "." & (ff's name extension)) 
    end repeat 

end repeat 
end tell 

to MakeBase(txt) 
    set astid to AppleScript's text item delimiters 
    set AppleScript's text item delimiters to ":" 
    set new_Name_Raw to every text item of txt 
    set AppleScript's text item delimiters to "_" 
    set final_Name to every text item of new_Name_Raw as text 
    set AppleScript's text item delimiters to astid 
    return final_Name 
end MakeBase 

Спасибо!

ответ

0

Try:

set myFolder to do shell script "sed 's/\\/$//' <<< " & quoted form of POSIX path of (choose folder) 
set myFiles to paragraphs of (do shell script "find " & quoted form of myFolder & " \\! -name \".*\" -type f -maxdepth 2 -mindepth 2") 
repeat with aFile in myFiles 
    tell application "System Events" to set file aFile's name to (do shell script "sed 's/.*\\/\\([^/]*\\)\\/\\([^/]*\\)\\/\\([^/]*$\\)/\\1_\\2_\\3/' <<< " & quoted form of aFile) 
end repeat 
+1

Работал отлично, спасибо! – Brian

+0

Да, это работает, но Брайан не может ничего узнать о AppleScript от него. Если его потребности изменится, он не сможет переделать это, и он вернется к SO с другим вопросом. –

+0

Брайан узнает о возможностях AppleScript от этого, чем от вашего ответа. – adayzdone

1
tell application "Finder" 
    repeat with theItem in (the selection as list) 
     set theItem's name to (theItem's container's container's name) & "_" & (theItem's container's name) & "_" & (theItem's name) 
    end repeat 
end tell 

Если вы хотите узнать, как AppleScript может работать с приложением, просматривать словарь приложения из AppleScript команд (AppleScript Editor> Файл> Открыть словарь ...).

Edit 1

Вот версия, в которой вы выбираете "папку GrandParent", содержащий папки, содержащие элементы для переименования:

tell application "Finder" 
    set itemsToRename to {} 
    set selectedFolders to (the selection as list) 
    repeat with selectedFolder in selectedFolders 
     set childFolders to every item of selectedFolder 
     repeat with childFolder in childFolders 
      set grandchildItems to every item of childFolder 
      set itemsToRename to itemsToRename & grandchildItems 
     end repeat 
    end repeat 

    repeat with theItem in itemsToRename 
     set theItem's name to (theItem's container's container's name) & "_" & (theItem's container's name) & "_" & (theItem's name) 
    end repeat 
end tell 
+0

Я хочу быть в состоянии выбрать папку grandparent и передать правила всем файлам в подпапке, как я могу изменить это действие, чтобы сделать это? Я смог заставить это работать, но только на уровне файлов. Спасибо за помощь! – Brian

+0

См. Мою первую редакцию. –

+0

спасибо, это сработало! – Brian

Смежные вопросы