0 votos

Eliminar por lotes parte de los nombres de los archivos con Automator

Estoy tratando de crear un Automator script que elimine parte de un nombre de archivo después de un delimitador conservando la extensión.

Los archivos suelen llamarse como 1-cropped_DSC5888.jpg, 2-cropped_Whatsapp75.png etc. Quiero eliminar todo después de _ y mantener sólo la parte con el número y '-cropped' así como: 1-cropped.jpg

Lo he probado con este script

on run {input, parameters}
try
    set AppleScript's text item delimiters to {"_"}
    set theFileNameList to {}
    repeat with thisItem in input
        set the end of theFileNameList to text item 2 of (thisItem as text)
    end repeat
    set AppleScript's text item delimiters to {}
    return theFileNameList
on error eStr number eNum
    display dialog eStr & " number " & eNum buttons {"OK"} ¬
        default button 1 with icon caution
    set AppleScript's text item delimiters to {}
    return
end try

fin de carrera

Pero esto elimina la parte que quiero conservar y mantiene la parte que quiero eliminar. También me da sólo una salida, pero no renombra los archivos reales. ¿Alguna ayuda con esto, por favor?

1voto

red_menace Puntos 111

Todo lo que está haciendo es devolver una lista de los último parte de los nombres (si hay más de un carácter delimitador, el segundo parte) a la siguiente acción.

Los delimitadores de elementos de texto no son realmente necesarios si sólo se utiliza la primera ocurrencia de un carácter, por lo que se puede hacer algo así:

on run {input, parameters}
    set output to {}
    repeat with anItem in input
        set {theFolder, oldName, extension} to getNamePieces from anItem
        try
            set here to offset of "_" in oldName
            set newName to text 1 thru (here - 1) of oldName
            tell application "Finder" to set name of anItem to (newName & extension)
            set end of output to (theFolder & newName & extension) as alias
        on error errmess -- don't rename if error (delimiter not found, duplicate file, etc)
            log errmess
            set end of output to anItem as alias
        end try
    end repeat
    return output -- for next action
end run

to getNamePieces from someItem
    tell application "System Events" to tell disk item (someItem as text)
        set |container| to path of container
        set {|name|, extension} to {name, name extension}
    end tell
    if extension is not "" then
        set |name| to text 1 thru -((count extension) + 2) of |name| -- just the name part
        set extension to "." & extension
    end if
    return {container, |name|, extension}
end getNamePieces

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X