Nido Apple

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

¿Por qué no funciona como comando de voz, ni en Automator pero sí en la ejecución desde el editor de scripts?

Buenas noches.

He escrito un archivo de appleScript para mover los archivos seleccionados en el Finder a una carpeta situada en una unidad de disco externa.

Si se ejecuta desde el Editor de Scripts, su funcionamiento es correcto; sin embargo, al intentar ejecutarlo como un comando de voz no se lleva a cabo ninguna acción (aunque en la barra superior del sistema aparece el icono del “engranaje” simulando que algo se está realizando.

He intentado poner el código en Automator para hacer una aplicación en el escritorio donde se puedan arrastrar los archivos seleccionados, pero Automator da un “Error de sintaxis” ---> ("El gestor run está especificado más de una vez, o se han añadido comandos de alto nivel").

--Creación de menú y definimos las opciones del menú

tell application "System Events"

    activate

    set laLista to {"Cine antiguo (1900-2009)", "Cine moderno (2010-2014)", "Cine reciente (2015-2020)", "Óscar antiguos (1928-1990)", "Óscar modernos (1991-2020)"}

    --Permite elegir el elemento y define un elemento seleccionado por defecto

    choose from list laLista with prompt "Elige una opción" default items {"Cine reciente (2015-2020)"}

    set eleccionDeLista to result as text

end tell

-- Definir la ruta según el elemento elegido:

if eleccionDeLista is "Cine antiguo (1900-2009)" then
    set ruta to (POSIX file "/Volumes/1_NO_al2009/NO_1900 - 2009")

else if eleccionDeLista is "Cine moderno (2010-2014)" then
    set ruta to (POSIX file "/Volumes/2_NO_10_14_OSal90/NO_2010 - 2014")

else if eleccionDeLista is "Cine reciente (2015-2020)" then
    -- Submenú para elegir año de cine moderno

    tell application "System Events"

        activate

        set anoReciente to {"2015", "2016", "2017", "2018", "2019", "2020"}

        --Permite elegir el elemento y define un elemento seleccionado por defecto

        choose from list anoReciente with prompt "Elige una opción" -- default items {"2019"}

        set eleccionAno to result as text

    end tell

    if eleccionAno is "2015" then
        set ruta to (POSIX file "/Volumes/6_NO_15-20/NO_2015 - 2020/2015")

    else if eleccionAno is "2016" then
        set ruta to (POSIX file "/Volumes/6_NO_15-20/NO_2015 - 2020/2016")

    else if eleccionAno is "2017" then
        set ruta to (POSIX file "/Volumes/6_NO_15-20/NO_2015 - 2020/2017")

    else if eleccionAno is "2018" then
        set ruta to (POSIX file "/Volumes/6_NO_15-20/NO_2015 - 2020/2018")

    else if eleccionAno is "2019" then
        set ruta to (POSIX file "/Volumes/6_NO_15-20/NO_2015 - 2020/2019")

    else if eleccionAno is "2020" then
        set ruta to (POSIX file "/Volumes/6_NO_15-20/NO_2015 - 2020/2020")

    end if

else if eleccionDeLista is "Óscar antiguos (1928-1990)" then
    set ruta to (POSIX file "/Volumes/2_NO_10_14_OSal90/ÓSCAR 28 - 90")

else if eleccionDeLista is "Óscar modernos (1991-2020)" then
    set ruta to (POSIX file "/Volumes/5_CICLOS2_OS91-20/ÓSCAR 91 - 20")

end if

end

try -- Evita el mensaje de error si se cancela la selección
    tell application "Finder"
        set archivoSeleccionado to selection as alias
        move archivoSeleccionado to ruta -- Mueve el archivo a su destino
        delay 10 -- (Prueba con valores 1 ➡︎ 10)
        delete file archivoSeleccionado --   Borra el origen
    end tell
on error
    display dialog "Operación cancelada por el usuario :-(("
end try

Por otra parte, tengo las películas ordenadas en carpetas según el año de realización y había pensado en la posibilidad de extraer la cadena del año que forma parte del nombre de archivo ("2002 El arca rusa [Aleksandr Sokurov] VOSE 2002 (7,1).avi") para fabricar una ruta más precisa donde mover el archivo; es decir, que si la película tiene en su nombre la cadena "2002", 2002 sea usado para formar la ruta para enviarlo a la carpeta destinada a recibir los archivos de ese año.

Pido disculpas por la extensión de la pregunta y doy las gracias de antemano.

Salud.

1 Respuesta

1voto

DJUNQUERA Puntos690

Creo que encontré la solución haciendo unos pequeños cambios en la parte final del código:

--end       -- (Se “coló” este extraño)

try 
    tell application "Finder"
        set archivoSeleccionado to selection   -- En de vez de selection as alias
        move archivoSeleccionado to ruta
        delay 1 -- No es necesario tanto tiempo de espera (En vez de 10)
        delete archivoSeleccionado  -- En vez de delete file archivoSeleccionado
    end tell
on error
    display dialog "Operación cancelada por el usuario"
end try

Por otra parte, agradecería sugerencias para conseguir una estrategia para EXTRAER UNA SUBCADENA (“SUBSTRING”) DEL PATH del archivo(s) seleccionado(s) que daría un cambio radical al planteamiento actual basado en menús por otro más eficiente basado en la extracción de la cadena presente en nombre de archivo (año) que permitiría enviar el archivo a la correspondiente carpeta que almacena las películas de un determinado año.

Agradecimientos de antemano.

Salud. :-)

0voto

Peter comentado

Gracias por compartir la solución. :D

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...