3 votos

¿Cómo se pone una variable en medio de un camino? (AppleScript)

Estoy intentando escribir un código que borre los archivos de una ubicación especificada y los vacíe en la papelera. Si uso la cadena directa funciona pero cuando intento añadir una variable no lo hace. ¿Podría alguien ayudarme a mostrar lo que estoy haciendo mal?

Cuando intenté buscar el número de código de error en la parte inferior, no me dio mucha información.

Válido

tell application "Finder"
        delete (every item of folder "Macintosh HD:Users:sme0219:Pictures:Camera" whose name contains ".png")
end tell

Inválido

tell application "System Events"
    set userName to name of current user
    set compName to name of startup disk
end tell

tell application "Finder"
    delete (every item of folder compName & ":Users:" & userName & ":Pictures:Camera" whose name contains ".png")
end tell

Informe de errores

error "No se puede obtener {carpeta "Aplicaciones" del disco de inicio de la aplicación "Finder", carpeta "Biblioteca" del disco de inicio de la aplicación "Finder", carpeta "Sistema" del disco de inicio de la aplicación "Finder", carpeta "Usuarios" del disco de inicio de la aplicación "Finder", ":Usuarios:", "sme0219", ":Imágenes:Cámara"} cuyo nombre contiene ".png"." número -1728

3voto

user3439894 Puntos 5883

Es necesario poner paréntesis alrededor:

compName & ":Users:" & userName & ":Pictures:Camera"

Ejemplo:

(compName & ":Users:" & userName & ":Pictures:Camera")

Esto concatena todo lo que está dentro de los paréntesis como la ruta completa, de lo contrario Buscador sólo ve:

delete (every item of folder compName & ":Users:" & userName & ":Pictures:Camera" whose name contains ".png")

Como:

get every item of folder "Macintosh HD"

No todo el camino.

Entonces, esto funciona:

tell application "System Events"
    set userName to name of current user
    set compName to name of startup disk
end tell

tell application "Finder"
    delete (files of folder (compName & ":Users:" & userName & ":Pictures:Camera") whose name contains ".png")
end tell

En lugar de confiar en Eventos del sistema para obtener esa información, puede utilizar el ruta de acceso (carpeta) convención para determinar su camino Por ejemplo:

set targetFolder to (path to pictures folder from user domain) & "Camera" as string

tell application "Finder"
    delete (files of folder targetFolder whose name contains ".png")
end tell

Por favor, tómese un momento para leer el documento enlazado, ya que creo que lo encontrará bastante informativo.

También hay que tener en cuenta que desde que declaró code that deletes files en el OP y su código tenía el potencial de borrar una carpeta que tenía un .png extensión que every item tiene cambios en la abeja files con la excepción de la línea que sigue a "de otro modo". Buscador sólo ve:" en esta respuesta ya que esa línea es parte de la explicación del problema que tienes.

2voto

wch1zpink Puntos 11

Esto también funciona

property folderPath : (path to users folder from system domain as text)

tell application "System Events"
    delete (files of alias (folderPath & name of current user & ¬
        ":Pictures:Camera:") whose name contains ".png")
end tell

NOTA Esta opción elimina los archivos de forma permanente y no va a la papelera.


Por cierto decidí usar Eventos del Sistema para borrar los archivos ".png" porque después de probar el código con el Finder borrando 400 archivos ".png" y luego con Eventos del Sistema moviendo 400 archivos ".png" a la carpeta .Trash El Finder tardó 26 segundos en borrarlos todos vs. Eventos del Sistema tardó 3 segundos en moverlos todos a la carpeta .Trash (En lugar de borrarlos inmediatamente, que tardó 1,3 segundos).

enter image description here


Puede considerar la posibilidad de intentar adquirir el hábito de utilizar Eventos del sistema en lugar de Buscador para manejar los comandos que ambos tienen en común. El uso de Finder para procesar grandes cantidades de elementos puede crear a menudo enormes cuellos de botella al ejecutar sus AppleScripts


En respuesta a tu pregunta en el comentario de este post, este código siguiente haría el trabajo.

tell application "System Events"
    tell current application to set userName to do shell script "whoami"
    set compName to name of (startup disk)
    set trashPath to (compName & ":Users:" & userName & ":Pictures:Camera")
    delete (every file of folder trashPath whose name contains ".png")
end tell

Eventos del sistema no tiene un item para actuar sobre ella, por lo que tendría que utilizar delete every file… No delete every item…

-2voto

sme0219 Puntos 42

Esto es lo que terminé haciendo con un 100% de éxito:

tell application "Finder"
    set userName to do shell script "whoami"
    set compName to name of (startup disk)
    set trashPath to (compName & ":Users:" & userName & ":Pictures:Camera")
    delete (every item of folder trashPath whose name contains ".png")
end tell

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