AppleScript: trabajo y movimiento de iTunes a granel

Aquí estoy otra vez con otra pregunta de iTunes AppleScript. Tengo un script de trabajo en el que selecciona un trabajo (varias "canciones" de iTunes) y le digo qué establecer los metadatos de trabajo para esa selección. También le dice dónde comienza el nombre del movimiento en el nombre de la canción, y copy todo después de esa position en la label de movimiento, excluyendo todos los numbers romanos. También, por supuesto, numera los movimientos.

Aquí está el código para eso:

  • Establezca el tamaño de la window en píxeles exactos y colóquelo a través de las coorderadas x, y
  • La input del usuario asignada a la variable en AppleScript luego pasa al command "do shell script"
  • AppleScript: ¿Cómo abrir un file en TextEdit, sin traer las otras windows de TextEdit al frente?
  • ¿Hay un visor GUI de las bases de datos creadas por los events de la database?
  • ¿Cómo podría hacer una aplicación independiente en mi base para abrir un juego usando un command de terminal?
  • ¿Cómo puedo cambiar la pantalla principal automáticamente en una configuration de monitor doble?
  • tell application "iTunes" set sel to selection of front browser window if sel is {} then try display dialog "Nothing is selected…" buttons {"Quit"} with icon 0 end try return end if set c to (count of sel) set songName to (get name of item 1 of sel) set workName to display dialog "Edit for Work name and then click OK." default answer songName --prompt for work name set movementLength to display dialog "Edit to everything except the movement name. Do not include the roman numeral if one is present. If an arabic numeral is present, include it." default answer songName --prompt for movement length repeat with i from 1 to c --set the movement numbers set thisTrack to item i of sel set songName to (get name of thisTrack) set work of thisTrack to text returned of workName set movement number of thisTrack to i set movement count of thisTrack to c set movement of thisTrack to my delRomNum(text ((length of text returned of movementLength) + 1) thru (length of songName) of songName as string) -- copy movement text from song name and delete roman numerals end repeat end tell on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character) do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t end delRomNum 

    Puedes ver mi publicación sobre ese script aquí: Buscar y replace AppleScript para iTunes Track Names

    De todos modos, esa secuencia de commands ahora no se ha vuelto lo suficientemente eficiente para mi uso (¡process muchas pistas clásicas)! Usando la secuencia de commands anterior, tengo que seleccionar cada trabajo y recortarlo en consecuencia para el trabajo y luego para el movimiento.

    Lo que me gustaría crear ahora es un script que pueda hacer todo el process para múltiples obras a la vez, por ejemplo, un álbum completo.

    Tendría que encontrar todas las pistas que contenían I. y establecerlo como punto de partida para el guión que he descrito anteriormente, y también get la position de ese I. y recortar en consecuencia las tags de Trabajo y Movimiento para ese trabajo en particular, por ejemplo todo antes de I. y el espacio que lo precede se establecerá como el trabajo, y todo lo que sigue se establecerá como el movimiento.

    ¡Puedo ver que esto es lo que tengo que hacer, pero soy un novato de AppleScript para implementarlo realmente! Para mí, de todos modos, el verdadero desafío radica en determinar si una string se encuentra dentro de otra string (por ejemplo, verificar si I. está dentro del nombre de la canción) y encontrar su position dentro del nombre de la canción. ¡Si supiera cómo hacer esas dos cosas, probablemente podría escribir el rest del guión!

    Cualquier sugerencia / idea sería muy útil. Y espero que mi descripción tenga sentido. ¡Gracias!

    Nota: Aunque recibí la parte key respondida y puedo escribir el rest del guión, agregaré una input / salida de muestra.

    enter image description here

  • Solo la primera pista reproducida en iPhone se actualiza a iTunes Playlist
  • Sincronización de biblioteca de iTunes entre dos computadoras
  • iTunes: haciéndolo recordar la última canción y position
  • ¿Cuál es la diferencia entre "activar" y "lanzar"?
  • Limpia el exceso de iTunes
  • iPod Nano sigue funcionando / permaneciendo en modo de recuperación
  • 2 Solutions collect form web for “AppleScript: trabajo y movimiento de iTunes a granel”

    El uso is in para verificar si " I. " está dentro del nombre de la canción, así: if " I." is in someString if " I." is in someString .

    Use el command de offset para get su position dentro del nombre de la canción


    Aquí hay un ejemplo

     set songName to (get name of thisTrack) if " I." is in songName then -- " I." is inside this song name set {theWork, theMovement} to my splitText(songName, " I.") -- split the string to get the Work and the Movement end if on splitText(t, theSearchString) set x to the offset of theSearchString in t set a to text 1 thru (x - 1) of t -- everything before theSearchString would be set as the work set b to text x thru -1 of t -- this part would be set as the movement return {a, b} end splitText 

    Así que aquí está mi guión completo, basado en la otra respuesta que se ha dado.

    Sé que mi respuesta probablemente sea intrincada y no eficiente, ¡pero funciona!

     tell application "iTunes" set sel to selection of front browser window if sel is {} then try display dialog "Nothing is selected…" buttons {"Quit"} with icon 0 end try return end if set theSearchString to text returned of (display dialog "Enter the characters between the work name and movement name, for the first movement. Include spaces:" default answer ": I. ") set c to (count of sel) set songName to (get name of item 1 of sel) set movementNumber to 0 set movementOffset to 0 set theSearchString_no_rn to my delRomNum(theSearchString) repeat with i from 1 to c --set the movement numbers set thisTrack to item i of sel set songName to (get name of thisTrack) if theSearchString is in songName then -- " I. " is inside this song name set movementOffset to the offset of theSearchString in songName set movementNumber to 0 end if set theMovement to text (movementOffset + (length of theSearchString_no_rn)) thru -1 of songName -- this part would be set as the movement set theWork to text 1 thru (movementOffset - 1) of songName -- everything before theSearchString would be set as the work set movementNumber to movementNumber + 1 set movement number of thisTrack to movementNumber set movement of thisTrack to my delRomNum(theMovement) set work of thisTrack to theWork end repeat end tell on delRomNum(t) -- the perl command search and delete any roman numeral (must be a word followed by the period and a space character) do shell script "/usr/bin/perl -pe 's/\\b[IVXLCDM]+\\b. //g' <<< " & quoted form of t end delRomNum 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).