AppleScript für iTunes-Titelnamen suchen und ersetzen

Ich versuche, ein AppleScript zu schreiben, um Massenvorgänge zum Suchen und Ersetzen von iTunes-Titelnamen durchzuführen. Derzeit ist dies mein Code:

Sagen Sie der Anwendung "iTunes"
    setze sel auf die Auswahl des vorderen Browserfensters
    wenn sel dann {} ist
        versuchen
            Anzeigedialog "Nichts ist ausgewählt…" Schaltflächen {"Beenden"} mit Symbol 0
        Versuch beenden
        zurückkehren
    Ende wenn
    
    setze c auf (count of sel)
    
    set theSearchString to display dialog "Find:" default answer "" --prompt for input to search for
    
    Set theReplacementString to display dialog "Replace with:" default answer "" --prompt for input to search for
    
    Wiederholen Sie mit i von 1 bis c --stellen Sie die Satznummern ein
        setze thisTrack auf Item i von sel
        setze songName auf (erhalte den Namen dieses Tracks)
        setze den Namen von thisTrack auf (findAndReplaceInText(songName, von theSearchString zurückgegebener Text, von theReplacementString zurückgegebener Text))
        
    Ende wiederholen
    
Ende erzählen

on findAndReplaceInText(theText, theSearchString, theReplacementString)
    Setzen Sie die Trennzeichen für Textelemente von AppleScript auf theSearchString
    setze theTextItems auf jedes Textelement von theText
    Legen Sie die Textelement-Trennzeichen von AppleScript auf theReplacementString fest
    setze theText auf theTextItems als String
    Setzen Sie die Textelement-Trennzeichen von AppleScript auf ""
    gib den Text zurück
end findAndReplaceInText

Derzeit gibt die findAndReplaceInText()Funktion den Fehler 1708 zurück. Was habe ich falsch gemacht? Die Funktion „Suchen und Ersetzen“ stammt von Apple: Mac Automation Scripting Guide – Manipulating Text

Antworten (1)

myTechnisch gesehen müssen Sie nur vor setzen findAndReplaceInText, aber diese Version des Codes ist meiner Meinung nach eine bessere Möglichkeit, ihn zu schreiben.

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

Beachten Sie auch, dass Ihr Skript zwar den angezeigten Namen des Songs ändert, aber nicht die Dateisystemebene, sondern nur die in iTunes gespeicherten Metadaten.

Funktioniert wie ein Zauber, danke! Ich habe einen Auswahldialog hinzugefügt, um in jedem Metadatenfeld Suchen und Ersetzen durchzuführen. Ich benutze es bereits tonnenweise!