Automator: Applescript para ejecutar pulsaciones de teclas para cada carpeta anidada en Finder

2

¡¡Ayuda !!

He invertido muchas horas intentando resolver esto y siento que es hora de buscar ayuda :)

Estoy intentando escribir un Applescript en Automator que ejecutará ciertas pulsaciones de teclas en el Finder para la carpeta principal y cada subcarpeta. Hasta el momento, solo puedo hacer que las pulsaciones se apliquen a la carpeta principal que se selecciona durante la ejecución del script; las subcarpetas permanecen como estaban sin haber aplicado las pulsaciones de teclas.

Las pulsaciones de tecla son específicas del Finder y hacen que la carpeta esté organizada por "Tipo" y ordenada 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 conocimiento limitado de Applescript, pero obviamente no está funcionando correctamente.

¿Algún consejo?

    
pregunta mvern 09.09.2016 - 03:12

2 respuestas

0

Si entendí lo que desea, es decir, seleccione una carpeta y luego ésta y todas las subcarpetas dentro de ella, incluidas las subcarpetas de subcarpetas, etc., aplican esta configuración.

Para pasar las pulsaciones a las carpetas de destino, cada una debe ser la ventana activa en el Finder primero, luego los Eventos del sistema pueden enviar las pulsaciones.

Por lo tanto, escribiría el código como se muestra en el siguiente ejemplo.

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 desea actuar solo en las subcarpetas de nivel superior dentro de la carpeta principal, en lugar de:

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

Usa lo siguiente:

set theFolders to every folder of parentFolder as alias list    

Tenga en cuenta que delay 0.5 puede no ser absolutamente necesario, sin embargo lo agregué porque sin él, la serie de abrir y cerrar las ventanas de la carpeta puede pasar tan rápido que es desconcertante y ralentizarlo un poco lo facilita. Aunque también puede ser necesario, dependiendo de qué tan rápido / lento se lleve a cabo el procesamiento, para asegurarse de que la ventana de cada carpeta en el repeat loop esté realmente disponible y tenga el foco para recibir las pulsaciones de teclas. En cualquier caso, el valor de delay puede / puede cambiarse según sea necesario / deseado para permitir que las tareas se realicen adecuadamente y de una manera visual que parezca más natural que un aluvión de ventanas de apertura / cierre Dejando que uno se pregunte, que acaba de pasar.

    
respondido por el user3439894 09.09.2016 - 06:28
0

@ user3439894 merece el crédito por responder esto.

El código propuesto por el usuario 3439894 era:

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 funcionó como está escrito y devolvió el siguiente error:

Entonces,alnoserunexpertoenApplescript,memetíunpocoenlacuartalíneadecódigo:

settheFolderstoeveryfolderofentirecontentsofparentFolderasalias

ylocambiéaesto:

settheFolderstoeveryfolderofentirecontentsofparentFolderaslist

yfuncionó!

Algunoscomentariossobreesto.Loutilicéparamodificarlosparámetrosdeorganización/clasificacióndevisualizacióndemilesdecarpetas,lamayoríadelascualesnoveo,perocomoeraautomatizadayfácil,¿porquéno?Loejecutéconunretrasode0.1enlugarde0.5yfuncionóbien.Nolointentésindemora.Elúnicoproblemaconelquemetopéfuequeparecíahaberalgúntipodeagujeronegroacumulativoasociadoconelcódigo.Cuandoloejecutéenmidirectorioqueteníamilesdesubcarpetas,mellevócasi7horascompletarlaoperación.MiventiladordeMacBookseactivócuandolatemperaturadelaCPUaumentódrásticamente.Porextrañoqueparezca,eltiemporequeridoparaejecutarcadajuegodepulsacionesdeteclasaumentóconeltiempo;literalmente,sehizocadavezmáslento.Nopudehacerningúndiagnósticoyaquelarutinanoseejecutabaensegundoplano,peroenrealidadseejecutabacomosiloestuvierahaciendomanualmente.Dejéquefuncionaradurantelanocheydescubríquemicomputadoraaúnestabainactiva,esdecir,todoslosprogramasseejecutabanconlentitudylapequeñaruedagiratoriaaparecíaparalastareasmássimples.LogréabrirelMonitordeactividadynotéqueelprocesodeWindowServerestabausandoaproximadamenteun130%delaCPU;nosécómoesposible,peroesoesloquedecía.Asíquereiniciéyelproblemadesapareció.AquíhayunacapturadepantalladelresumendeAutomatorquesemuestraalfinaldelproceso:

Comohedicho,pocomenosde7horas.¡Perovaliólapena!Sivolvieraahacerlo,loejecutaríasoloenlosdirectoriosprincipalesalosqueaccedoconciertaregularidad.Ahorapuedovolveraloquepretendíahacerantesdeencontrareste"problema" :) Malcolm in the Middle : Hal intenta cambiar una bombilla

    
respondido por el mvern 11.09.2016 - 03:10

Lea otras preguntas en las etiquetas