0 votos

Obtener la selección de archivos de Automator desde varios Windows

He creado una acción de automator (servicio) que busca dos archivos o carpetas diferentes y luego realiza una acción basada en sus rutas y nombre de archivo. El problema es que cada par de archivos/carpetas está en una ubicación diferente. Puedo abrir dos ventanas del Finder y seleccionar el archivo o la carpeta en cada una de ellas, pero cuando intento ejecutar la acción de Automator, sólo pasa el nombre del archivo de la ventana del Finder actualmente seleccionada.

¿Cómo puedo hacer que Automator ejecute la acción en archivos de diferentes carpetas?

Mi automatizador tiene una sola acción, "Ejecutar Shell script" con el siguiente script:

for filepath in "$@"; do
  P4TH=`echo "$filepath" | rev | cut -d/ -f2- | rev`
  FILE=`echo "$filepath" | rev | cut -d/ -f1 | rev` 
  echo "P4TH=$P4TH, FILE=$FILE" >> /Users/michael/debug.txt
done

1voto

Malik hassan Puntos 16

Lo único que se me ocurre es un poco de GUI Applescript.

Coloque este código en una acción "Ejecutar Applescript" por encima de su acción "Ejecutar Shell script".

El Applescript está comentado para explicar lo que está haciendo. Pero ten en cuenta que este código es para empezar.

Funciona en mis pruebas.

NOTA: Este scriptfunciona cuando las ventanas están en la vista de lista

Pero no si selecciona un elemento en una lista que en realidad está bajo otra carpeta, es decir, el revelador de la carpeta está apuntando hacia abajo y usted ha seleccionado un elemento dentro de ella. Obtendrá un error.

    set thePaths to {} -- empty list

    (* NOTE THIS SCRIPT WORKS WHEN THE WINDOWS ARE IN LIST VIEW *)
    tell application "Finder"
        activate
        set theWindows to target of windows -- get the windows target paths
        repeat with i from 1 to number of items in theWindows -- repeat for each window
            set this_window to item i of theWindows -- get window #n
            set thisSelection to my getSelected(i) as string -- run sub routine and pass the item count as the arguments

            set thePath to POSIX path of (item thisSelection of this_window as alias) -- convert the path to unix style path
            copy thePath to end of thePaths -- add to list
        end repeat
    end tell
Return thePaths

    on getSelected(i)
        set theRowSelection to "" -- declare variable
        tell application "System Events"
            tell process "Finder"

                set theRowSelection to value of text field 1 of UI element 1 of ((rows of outline 1 of scroll area 1 of splitter group 1 of window i) whose value of attribute "AXSelected" is true) -- get the selected item by using the attributes of the window - WHICH HAS THE SIDE BAR SHOWING

                 if theRowSelection is {missing value} then -- THE SIDE BAR SHOWING WAS NOT SHOWING SO THE scroll area 1 NEEDS TO CHANGE TO scroll area 2

                    set theRowSelection to value of text field 1 of UI element 1 of ((rows of outline 1 of scroll area 2 of splitter group 1 of window i) whose value of attribute "AXSelected" is true)

                end if

            end tell
        end tell
        return theRowSelection -- return the selected item name
    end getSelected

1voto

Baczek Puntos 150

Esto es posible seleccionando la segunda ventana para obtener la selección.

Inserte el " Ejecutar AppleScript " en la primera posición del flujo de trabajo, borrar todo el texto de la acción, y poner este script en la acción:

on run {input, parameters}
    tell application "Finder"
        activate -- doesn't work without the activate
        open target of Finder window 2 ---  select the second Finder window
        set end of input to (item 1 of (get selection)) as alias -- append the selection (in the second window) to the input list
        open target of Finder window 2
    end tell
    return input
end run

Probado en Mavericks

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