Сортировка файлов в новые папки по первому номеру с помощью Applescript

Я пытаюсь создать папку, которая будет автоматически создавать папки, а затем сортировать файлы в них по первому номеру. Все файлы, которые я должен отсортировать, имеют похожий формат с именем, например,4 февраля 2.3 U # 03 (3).mrd. Я хотел написать AppleScript для создания папки на основе номера (2.3), затем поместить все файлы с (2.3) в эту папку и сделать то же самое со всеми остальными файлами.

Я сделал немного, который сортирует файлы по их количеству, что, кажется, работает,

set text item delimiters to {" "}
tell application "Finder"
    set aList to every file in folder "Re-namer"
    repeat with i from 1 to number of items in aList
    set aFile to (item i of aList)
    try
      set fileName to name of aFile
      set firstPart to text item 1 of fileName
      set secondPart to text item 2 of fileName
      set thirdPart to text item 3 of fileName
      set fourthPart to text item 4 of fileName
      set fifthPart to text item 5 of fileName
      set newName to thirdPart & " " & secondPart & " " & firstPart & " " & fourthPart & " " & fifthPart
    set name of aFile to newName
    end try
end repeat
end tell

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

tell application "Finder"
open folder "Re-namer"
set loc to folder "Re-namer"
set aList to every file in loc
repeat with i from 1 to number of items in aList
    set aFile to (item i of aList)
    if not (exists folder named "text item 1" in loc) then
        make new folder in loc with properties {name:"text item 1"}
    else
        move aFile in folder "text item 1"
    end if
end repeat
end tell

Я нашел несколько похожих вопросов, но до сих пор не могу заставить их работать. Если у кого-то есть какие-либо идеи или ресурсы, чтобы помочь с этим вопросом, я бы очень оценил его.

1 ответ

Вы очень близки к правильному сценарию. Однако вместо того, чтобы делать 2 цикла, один для изменения имен и один для перемещения файлов, быстрее выполнить только 1 цикл, выполняя оба цикла одновременно.

Кроме того, ключевым моментом является понимание того, что в цикле, если вы измените имя, Finder потеряет ссылку на измененный файл, то произойдет сбой при попытке переместить его после изменения имени. но поскольку вы знаете папку и новое имя, вы все равно можете ссылаться на этот "новый" файл.

set MyRenamer to choose folder "Select the folder"
set TPath to MyRenamer as string
set text item delimiters to {" "}
tell application "Finder"
    set aList to every file in MyRenamer
        repeat with F in aList
        set fileName to name of F
        set firstPart to text item 1 of fileName -- like "Feb"
        set secondPart to text item 2 of fileName -- like "4"
        set thirdPart to text item 3 of fileName -- like "2.3"
        set fourthPart to text item 4 of fileName -- like "U#03"
        set fifthPart to text item 5 of fileName -- like "(3).mrd"
        set newName to thirdPart & " " & secondPart & " " & firstPart & " " & fourthPart & " " & fifthPart
        set name of F to newName
        if (not (exists folder thirdPart in MyRenamer)) then
            make new folder in MyRenamer with properties {name:thirdPart}
        end if
        move (TPath & newName) as alias to folder (TPath & thirdPart & ":") -- rebuild the new file path as alias and move it.
    end repeat
end tell

Проверено и ОК.

Другие вопросы по тегам