2 votos

Automator: Applescript para ejecutar golpes de teclado para cada carpeta anidada en Finder

Ayuda!!

He puesto muchas horas tratando de resolver esto y creo que es hora de conseguir un poco de ayuda :)

Estoy tratando de escribir un Applescript en Automator que se va a ejecutar ciertas combinaciones de teclas en el Buscador de la carpeta principal y cada uno de los sub-carpeta. Hasta el momento sólo puedo conseguir las pulsaciones de teclas para ser aplicada a los padres de la carpeta que está seleccionada durante la ejecución de la secuencia de comandos; el sub-carpetas siguen como estaban, sin haber tenido las pulsaciones de teclas aplicado.

Las teclas son específicos para el Buscador y hacer que la carpeta organizado por "Tipo" y clasificados por "Nombre".

Aquí está mi código:

activate application "Finder"

tell application "Finder"
    set theFolders to every folder of (choose folder) as alias list
end tell

tell application "System Events"
    repeat with eachFolder in theFolders
        keystroke "2" using {control down, command down}
        keystroke "1" using {control down, option down, command down}
    end repeat
end tell

El código tiene sentido para mí en mi limitado conocimiento de Applescript, pero obviamente no está funcionando correctamente.

Algún consejo?

0voto

user3439894 Puntos 5883

Si he entendido lo que desea, es decir, seleccionar una carpeta y, a continuación, y cada sub-carpeta dentro de ella, incluyendo sub-carpetas con subcarpetas etc., consigue estos aplicado.

Con el fin de transmitir las pulsaciones de teclas para las carpetas de destino de cada una de las necesidades a ser la ventana activa en el Buscador primero, luego de los Eventos del Sistema pueden enviar las pulsaciones de teclas.

Así que, me gustaría escribir el código como en el ejemplo de abajo.

tell application "Finder"
    activate
    set parentFolder to (choose folder) as alias
    set theFolders to every folder of entire contents of parentFolder as alias list
    set theFolders to {parentFolder} & theFolders    -- # Adds the chosen folder to the list of folders to be acted upon.
    repeat with eachFolder in theFolders
        open eachFolder
        delay 0.5
        activate eachFolder    -- # This is done to ensure the target folder's window has focus before being acted upon.
        tell application "System Events"
            keystroke "2" using {control down, command down}    -- # Sets: View > Arrange By > Kind
            keystroke "1" using {control down, option down, command down}    -- # Sets: View > Sort By > Name
        end tell
        close eachFolder
    end repeat
end tell

Si estás queriendo actuar solo en el nivel superior sub-carpetas dentro de la carpeta principal, a continuación, en lugar de:

set theFolders to every folder of entire contents of parentFolder as alias list

Utilice el siguiente:

set theFolders to every folder of parentFolder as alias list    

Tenga en cuenta que el delay 0.5 puede no ser absolutamente necesario, sin embargo, lo he añadido porque sin él, la serie de apertura y cierre de la carpeta de windows puede ir tan rápido es desconcertante y que se ralentice un poco facilita que. Aunque también puede ser necesario, dependiendo de cuán rápido/lento el procesamiento se lleva a cabo, para asegurar que cada carpeta de la ventana en la repeat de bucle está realmente disponible y tiene el foco en el fin de recibir las pulsaciones de teclas. En cualquier caso, el valor de delay puede/puede cambiar según sea necesario/quería permitir que las tareas correctamente ocurrir y de una manera visual que aparece más natural después de un aluvión de apertura/cierre de ventanas dejando a uno a preguntarse, ¿qué ha sucedido.

0voto

mvern Puntos 13

@user3439894 merece el crédito para responder a esta.

El código propuesto por user3439894 fue:

tell application "Finder"
activate
set parentFolder to (choose folder) as alias
set theFolders to every folder of entire contents of parentFolder as alias
set theFolders to {parentFolder} & theFolders    
repeat with eachFolder in theFolders
    open eachFolder
    delay 0.5
    activate eachFolder 
    tell application "System Events"
        keystroke "2" using {control down, command down} 
        keystroke "1" using {control down, option down, command down}    
    end tell
    close eachFolder
end repeat
end tell

Esto no funcione como está escrito y devolvió el siguiente error: enter image description here

Así que, al no ser un Applescript experto he metido un poco con la 4ª línea de código:

set theFolders to every folder of entire contents of parentFolder as alias

y lo cambiaron a este:

set theFolders to every folder of entire contents of parentFolder as list

¡y funcionó!

Un par de comentarios acerca de este. Yo lo he utilizado para modificar la visualización de organizar/parámetros de ordenación de miles de carpetas - la mayoría de los cuales yo no lo veo, pero ya que estaba automatizado y fácil, por qué no. Me encontré con un retardo de 0.1 en lugar de 0.5 y funcionó bien. Yo no intentar hacerlo sin una demora. La única kink me encontré fue parecía ser algún tipo de acumulado agujero negro asociada con el código. Cuando me encontré en mi directorio que había miles de sub-carpetas, tardó casi 7 horas para completar la operación. Mi MacBook fan de una patada en como la temperatura de la CPU aumentó drásticamente. Extrañamente, el tiempo necesario para ejecutar cada conjunto de teclas de alguna manera en aumento con el tiempo - literalmente, acaba de conseguir más lento y más lento. Yo no era capaz de hacer cualquier diagnóstico, dado que la rutina no se estaba ejecutando en segundo plano, pero en realidad se ejecuta como si lo estaba haciendo de forma manual. Yo deje que se ejecute durante la noche y mi ordenador estaba todavía lento es decir, todos los programas corrió lento y el poco spinny rueda apareció por la más simple de las tareas. Me las arreglé para abrir el Monitor de Actividad y noté que el WindowServer proceso fue el uso de algunos ~130% de la CPU - ¿cómo que es posible, yo no lo sé, pero eso es lo que dijo. Así que reinicié y el problema desapareció. Aquí está una captura de pantalla de la Automator resumen que se muestra al final del proceso:

enter image description here

Como he dicho, poco menos de 7 horas. Pero valió la pena! Si tuviera que hacerlo de nuevo iba a funcionar sólo en los directorios padre que puedo acceder con cierta regularidad. Ahora por fin puedo volver a lo que yo pensaba hacer, en primer lugar, antes de que me encontré con este "problema" :) Malcolm en el Medio: Hal intenta cambiar una bombilla de luz

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