Actualización: Como ya he mencionado en alguna parte en los comentarios que me gustaría construir un 10.12.5 sistema de este pasado fin de semana y hacer algunas pruebas, yo lo hice.
Aquí es lo que he encontrado:
- El código de mi respuesta, inclusive de edición 5 de Jun 2, a las 15:34, funciona en mi sistema sin problema.
- Después de una revisión de todo el código y los comentarios, me di cuenta de que mientras mi código, como es, trabajó en mi sistema y me dio una nota en referencia a la
delay
comando tener que ajustar los valores de y o añadir/quitar/si es necesario, etc., que esto principalmente se reduce a cuestiones de tiempo y las dificultades de esa forma particular de evento de codificación.
Por lo tanto, y mientras yo voy a dejar el original de la respuesta en la parte inferior de esta actualización, me decidí a buscar en esto desde un diferente programática ángulo y ofrecen el siguiente código como una mejor forma de código de este script para realizar la tarea en mano.
Este nuevo código, no se basa en el cierre de abrir el Buscador de windows y, a continuación, la apertura de un Buscador de la ventana del Escritorio de la carpeta del Usuario para luego tener los Eventos del Sistema seleccionar todos los elementos en la carpeta de destino, o el uso de la delay
comando para lidiar con los problemas de sincronización, etc. Todo lo cual yo, personalmente, no me gusta, porque no quiero que todo Buscador de windows me han abierto, cerrado para realizar una tarea como esta. O código de salir de la existente de windows abierto, garantizando el Buscador de la ventana del Escritorio de la carpeta dentro de la Casa de la carpeta es el superior del Buscador de la ventana para asegurarse de Eventos del Sistema selecciona la correcta artículos y obtener los intervalos de derecho, etc.!
El siguiente AppleScript código ofrece un más seguro y más rápido para llevar a cabo la tarea en mano y os animo a utilizar a lo largo de la anterior código de los ejemplos.
Nota: Con la anterior de supuestos en juego, (la existencia de la carpeta de la carpeta de destino se crea en el, etc.), usted no debe no debe modificar este código y debe ser capaz de utilizar como es. Es decir, estamos ciertamente en libertad de modificar el código de todos modos usted necesita o quiere, pero como es, se debe trabajar.
Nueva AppleScript código:
tell current application
try
tell application "Finder"
if running then
set theseFileSystemObjects to (get every item of (path to desktop))
set theFileSystemObjectsNotLocked to {}
repeat with i from 1 to (count of theseFileSystemObjects)
set thisFileSystemObject to (item i of theseFileSystemObjects)
if not locked of (get properties of thisFileSystemObject) then
set end of theFileSystemObjectsNotLocked to thisFileSystemObject
end if
end repeat
if theFileSystemObjectsNotLocked is not equal to {} then
tell current application to set theDateTimeNow to ¬
(do shell script "date '+%m.%d.%Y @ %I.%M.%S %p'") as string
set theDestinationFolder to make new folder at ¬
((path to home folder as string) & "Jimz_Important_Stuff:Desktop_Cleanups:") with properties {name:theDateTimeNow}
move theFileSystemObjectsNotLocked to theDestinationFolder
open theDestinationFolder
activate theDestinationFolder
end if
else
tell current application
activate
display dialog "Finder is not currently running!" & linefeed & linefeed & ¬
"Open Finder, then run Desktop Clean Up again." buttons {"OK"} ¬
default button 1 with title "Desktop Clean Up"
end tell
end if
end tell
on error eStr number eNum
activate
display dialog eStr & " number " & eNum buttons {"OK"} ¬
default button 1 with title "Desktop Clean Up" with icon caution
return
end try
end tell
Original Respuesta:
Este es un ejemplo de cómo yo iba a escribir la totalidad de la secuencia de comandos a ejecutar, como es, como un .scpt archivo o una .aplicación de archivo, en su sistema. Estoy diciendo que el sistema, porque el destino de la carpeta de destino se establece para su sistema.
No hay necesidad de cargar un recurso externo y no de controlador para establecer el valor de la variable utilizada para la carpeta de destino nombre. Yo elijo usar una do shell script
comando para que, utilizando la date
comando para devolver una fecha personalizada de tiempo variable de cadena, ya que es una línea de código en comparación con la cantidad de código en la on timeandDate()
de controlador, y devuelve el mismo patrón.
Voy a seguir para utilizar esta en mi sistema con ajustada adecuadamente los nombres de ruta y un diferente patrón de las carpetas de destino nombre, en sustitución de la /
y :
con .
en la fecha personalizado de tiempo variable de cadena que se utiliza en la carpeta de destino nombre.
Como codificado, esta primera versión de la secuencia de comandos se mueve todos los objetos del sistema de archivos, que no bloqueado, actualmente en la carpeta del Escritorio a la carpeta de destino. La secuencia de comandos incluye mínimo adecuado manejo de errores y como están codificados usted no tiene los problemas que estaba teniendo. Por supuesto, esto supone que el $HOME/Jimz_Important_Stuff/Desktop_Cleanups
carpeta existe. Si no, usted obtendrá el mensaje de error apropiado, sin embargo adicionales de control de error podría ser añadido a crear el jerárquica de la estructura plegada como/si es necesario.
Esta primera secuencia de comandos debe resolver todos los problemas que están teniendo con su propio código y de la OMI es una mejor manera el código, a continuación, acaba de atrapar y comer el error con sólo un try
declaración solo, porque tal como ha sido codificado, sólo puede mover los archivos que son no bloqueado y ni siquiera intenta mover un archivo bloqueado.
Esto fue probado en macOS 10.12.3 y debe trabajar para usted en macOS 10.12.5, que está actualmente en ejecución.
AppleScript Código:
tell current application
try
set theDateTimeNow to (do shell script "date '+%m/%d/%Y @ %I:%M:%S %p'") as string
tell application "Finder"
if running then
close every window
set target of (make new Finder window) to (path to desktop)
activate
delay 0.5
tell application "System Events" to key code 0 using {command down}
delay 0.5
set theseFileSystemObjects to the selection
set theDestinationFolder to make new folder at ¬
((path to home folder as string) & "Jimz_Important_Stuff:Desktop_Cleanups:") with properties {name:theDateTimeNow}
set theListOfFileSystemObjectsNotLocked to {}
repeat with i from 1 to (count of theseFileSystemObjects)
set thisFileSystemObject to (item i of theseFileSystemObjects)
if not locked of thisFileSystemObject then
set end of theListOfFileSystemObjectsNotLocked to thisFileSystemObject
end if
end repeat
move theListOfFileSystemObjectsNotLocked to theDestinationFolder
reveal theDestinationFolder
else
tell current application
activate
display dialog "Finder is not currently running!" & linefeed & linefeed & ¬
"Open Finder, then run Desktop Clean Up again." buttons {"OK"} ¬
default button 1 with title "Desktop Clean Up" with icon caution
end tell
end if
end tell
on error eStr number eNum
activate
display dialog eStr & " number " & eNum buttons {"OK"} ¬
default button 1 with title "Desktop Clean Up" with icon caution
return
end try
end tell
Nota: Como el valor de la delay
comandos, pueden necesitar ser ajustadas a su sistema y / o adicionales añadidos como/si es necesario y / o retirar si no es necesario. Como está codificado, este script ha funcionado sin problema, docenas de veces en las pruebas, en mi sistema, con diferentes tamaños y recuentos de objetos del sistema de archivos se actuó en la carpeta del Escritorio. Realice los ajustes necesarios.
Los objetos del sistema de archivos probados fueron, archivos, carpetas, alias, enlaces simbólicos, la aplicación de paquetes y documentos haces, los dos últimos de los cuales son sólo las carpetas. Estos FSOs eran de distintos tamaños, tanto cerrada y no bloqueada.
Esta segunda versión de la secuencia de comandos que va más allá de sus necesidades expresadas y hace una copia de el cerrado de objetos del sistema de archivos en la actualidad en la carpeta del Escritorio a la carpeta de destino, mientras que el reinicio de bloqueo de la bandera en el duplicados para que puedan ser eliminados sin levantar una bandera en el momento en el que usted puede elegir para eliminarlos. La incluyo ya que puede tener un valor añadido y que les sea útil.
AppleScript Código:
tell current application
try
set theDateTimeNow to (do shell script "date '+%m/%d/%Y @ %I:%M:%S %p'") as string
tell application "Finder"
if running then
close every window
set target of (make new Finder window) to (path to desktop)
activate
delay 0.5
tell application "System Events" to key code 0 using {command down}
delay 0.5
set theseFileSystemObjects to the selection
set theDestinationFolder to make new folder at ¬
((path to home folder as string) & "Jimz_Important_Stuff:Desktop_Cleanups:") with properties {name:theDateTimeNow}
set theListOfFileSystemObjectsNotLocked to {}
set theListOfLockedFileSystemObjects to {}
repeat with i from 1 to (count of theseFileSystemObjects)
set thisFileSystemObject to (item i of theseFileSystemObjects)
if not locked of thisFileSystemObject then
set end of theListOfFileSystemObjectsNotLocked to thisFileSystemObject
else
set end of theListOfLockedFileSystemObjects to thisFileSystemObject
end if
end repeat
move theListOfFileSystemObjectsNotLocked to theDestinationFolder
duplicate theListOfLockedFileSystemObjects to theDestinationFolder
repeat with i from 1 to (count of theListOfLockedFileSystemObjects)
set thisFileSystemObject to (item i of theListOfLockedFileSystemObjects)
set locked of alias ((theDestinationFolder as string) & name of thisFileSystemObject) to false
end repeat
reveal theDestinationFolder
else
tell current application
activate
display dialog "Finder is not currently running!" & linefeed & linefeed & ¬
"Open Finder, then run Desktop Clean Up again." buttons {"OK"} ¬
default button 1 with title "Desktop Clean Up" with icon caution
end tell
end if
end tell
on error eStr number eNum
activate
display dialog eStr & " number " & eNum buttons {"OK"} ¬
default button 1 with title "Desktop Clean Up" with icon caution
return
end try
end tell