Мне нравятся такие маленькие проблемы, как этот Сэм.Они забавные для меня ... может быть, я болен;).Во всяком случае, я написал вам обработчик для очистки имени файла, как вы просили.Нетрудно манипулировать текстом в appleScript, если вы знакомы с разделителями текстовых элементов и тому подобным.Эти небольшие проблемы помогают мне усвоить навыки работы с текстом.
ПРИМЕЧАНИЕ: в свойстве nameList имя должно заканчиваться точкой или любым другим символом, который следует перед буквой D в последовательности чисел DxxPxx, как вы упомянули.
Так что попробуйте.Подключите различные имена файлов и убедитесь, что он работает так, как вы хотите.Конечно, вам нужно добавить больше значений в свойства nameList и nameReplaceList.
property nameList : {"Yellowst.Nat.Park."}
property nameReplaceList : {"Yellowstone National Park"}
set fileName to "Yellowst.Nat.Park.D12P55.DMS.3248.jpg"
cleanFilename(fileName)
(*================ SUBROUTINES ================*)
on cleanFilename(fileName)
-- first find the base name and file extension of the file name
set tids to AppleScript's text item delimiters
set ext to ""
if fileName contains "." then
set AppleScript's text item delimiters to "."
set textItems to text items of fileName
set ext to "." & item -1 of textItems
set baseName to (items 1 thru -2 of textItems) as text
set text item delimiters to ""
else
set baseName to fileName
end if
-- next find the pattern D, 2 numbers, P, and 2 numbers in the baseName
set chars to characters of baseName
set theSequence to missing value
repeat with i from 1 to (count of chars) - 6
set thisChar to item i of chars
if thisChar is "d" and item (i + 3) of baseName is "p" then
try
set firstNum to text (i + 1) thru (i + 2) of baseName
firstNum as number
set secondNum to text (i + 4) thru (i + 5) of baseName
secondNum as number
set theSequence to text i through (i + 5) of baseName
exit repeat
end try
end if
end repeat
-- now make the changes
if theSequence is not missing value then
set AppleScript's text item delimiters to theSequence
set theParts to text items of baseName
set fixedFirstPart to item 1 of theParts
repeat with i from 1 to count of nameList
if item i of nameList is fixedFirstPart then
set fixedFirstPart to item i of nameReplaceList
exit repeat
end if
end repeat
set fixedName to fixedFirstPart & " [" & firstNum & "x" & secondNum & "]" & ext
else
set fixedName to fileName
end if
set AppleScript's text item delimiters to tids
return fixedName
end cleanFilename
Теперь, если вы хотите автоматизировать это для папки, полной файлов, вы можете использовать этот код.Просто замените строки 3 и 4 приведенного выше сценария этим.Я не проверял этот код, но он достаточно прост, он должен работать как есть.
ПРИМЕЧАНИЕ: вам не нужно беспокоиться о том, что файлы без изображений находятся в папке, которую вы выбрали с этим кодом, потому что они выиграли't (я предполагаю это) имеет числовую последовательность DxxPxx и, следовательно, этот скрипт не изменит их никаким образом.
set theFolder to choose folder
tell application "Finder"
set theFiles to files of theFolder
repeat with aFile in theFiles
set thisName to name of aFile
set newName to my cleanFilename(thisName)
if newName is not thisName then
set name of aFile to newName
end if
end repeat
end tell