AppleScript: viendo una carpeta

2

Necesito una aplicación AppleScript en el escritorio para ver una carpeta, también en el escritorio, para los archivos que se han movido a ella.

Hasta ahora, tengo:

global folderSpool
tell application "Finder" to set folderSpool to folder "Spool" of desktop

on adding folder items to folderSpool after receiving the_files
    repeat with each_file in the_files
        set theDialogText to "File is: " & (each_file) & "."
        display dialog theDialogText
    end repeat
end adding folder items to

Cuando exporto el script como una aplicación, lo configuro en: "Permanecer abierto después de ejecutar el controlador". Luego abro la aplicación y la mantengo en funcionamiento.

Sin embargo, cuando muevo archivos a la carpeta "Spool", no sucede nada.

Probé la opción on idle , pero siguió creando diálogo tras diálogo, en lugar de hacerlo cuando los archivos se movieron a la carpeta.

¿Alguna idea?

    
pregunta Wayne Smallman 21.10.2017 - 15:42

1 respuesta

0

El comando que está utilizando, "al agregar un elemento de carpeta", es específico de las acciones de carpeta, por lo que no funcionará en un script de acción que no sea de carpeta. Estoy de acuerdo con los demás en que la acción de una carpeta es la mejor manera de manejarlo, pero si realmente quiere hacerlo sin hacerlo, puede crear una aplicación de apertura abierta que consulte el contenido de la carpeta y la compare con la última vez que se ejecutó. , y muestra los diferentes archivos. Cambie la propiedad runInterval para que se ejecute en su frecuencia preferida.

Nota: para simplificar, solo lo escribí para verificar si los archivos se agregaron a la carpeta de spool. Puedes modificarlo para comprobar si hay archivos eliminados duplicando la segunda sección en el código a continuación, y haciendo un bucle a través de spoolFiles y viendo si están en currentFiles.

Código AppleScript, como una aplicación abierta, a continuación:

property spoolFiles : {}
property currentFiles : {}
property runInterval : 5 -- interval is in seconds
global folderSpool

on idle
    tell application "Finder"
        set folderSpool to folder "Spool" of desktop
        if (count of spoolFiles) is 0 then set spoolFiles to name of every file of folderSpool
        set currentFiles to name of every file of folderSpool
    end tell

    set changedFiles to {}--Reverse and repeat this section to check for missing files
    repeat with i from 1 to count of currentFiles
        if currentFiles's item i is not in spoolFiles then
            set changedFiles's end to currentFiles's item i
        end if
    end repeat

    repeat with each_file in changedFiles
        set theDialogText to "File is: " & (each_file) & "."
        display dialog theDialogText
    end repeat
    set spoolFiles to currentFiles --important to update the spoolFiles so only new files will get displayed going forward.
    return runInterval
end idle
    
respondido por el Hurston 24.10.2017 - 20:09

Lea otras preguntas en las etiquetas