Buscar y reemplazar AppleScript para nombres de pistas de iTunes

Estoy tratando de escribir un AppleScript para realizar operaciones masivas de búsqueda y reemplazo en los nombres de las pistas de iTunes. Actualmente, este es mi código:

Dile a la aplicación "iTunes"
    establecer sel en la selección de la ventana frontal del navegador
    si sel es {} entonces
        intentar
            cuadro de diálogo de visualización "No hay nada seleccionado…" botones {"Salir"} con el icono 0
        intento final
        devolver
    terminara si
    
    establecer c en (recuento de sel)
    
    configure theSearchString para mostrar el cuadro de diálogo "Buscar:" respuesta predeterminada "" --solicitar entrada para buscar
    
    configure theReplacementString para mostrar el cuadro de diálogo "Reemplazar con:" respuesta predeterminada "" --solicitar entrada para buscar
    
    repita con i de 1 a c --establezca los números de movimiento
        establezca esta pista en el elemento i de sel
        establecer el nombre de la canción en (obtener el nombre de esta pista)
        establezca el nombre de esta pista en (findAndReplaceInText(songName, texto devuelto de SearchString, texto devuelto de theReplacementString))
        
    terminar repetir
    
final decir

on findAndReplaceInText(elTexto, laCadenaBúsqueda, laCadenaReemplazo)
    establezca los delimitadores de elementos de texto de AppleScript en SearchString
    establecer theTextItems en cada elemento de texto de theText
    establezca los delimitadores de elementos de texto de AppleScript en la cadena de reemplazo
    establecer theText a theTextItems como cadena
    establezca los delimitadores de elementos de texto de AppleScript en ""
    devolver elTexto
fin de buscar y reemplazar en texto

Actualmente, la findAndReplaceInText()función devuelve el error 1708. ¿Qué hice mal? La función de buscar y reemplazar proviene de Apple: Guía de secuencias de comandos de automatización de Mac: manipulación de texto

Respuestas (1)

Técnicamente, todo lo que necesita hacer es poner mydelante de findAndReplaceInText, sin embargo, esta versión del código es, en mi opinión, una mejor manera de escribirlo.

tell application "iTunes"

    set sel to selection of front browser window
    if sel is {} then
        display dialog "Nothing is selected…" buttons {"Quit"} with icon 0
        return
    end if

    set theSearchString to text returned of (display dialog "Find:" default answer "")
    set theReplacementString to text returned of (display dialog "Replace with:" default answer "")

    repeat with i from 1 to (count of sel)
        set thisTrack to item i of sel
        set name of thisTrack to my findAndReplaceInText((name of thisTrack), theSearchString, theReplacementString)
    end repeat

end tell

on findAndReplaceInText(theText, theSearchString, theReplacementString)
    set AppleScript's text item delimiters to theSearchString
    set theTextItems to every text item of theText
    set AppleScript's text item delimiters to theReplacementString
    set theText to theTextItems as string
    set AppleScript's text item delimiters to ""
    return theText
end findAndReplaceInText

También tenga en cuenta que si bien su secuencia de comandos cambia el nombre que se muestra de la canción, no lo cambia como el nivel del sistema de archivos, solo los metadatos almacenados en iTunes.

Funciona de maravilla, gracias! Agregué un cuadro de diálogo de selección para buscar y reemplazar en cualquier campo de metadatos. ¡Ya lo uso toneladas!