⚠️ Pregunta Se Cerró Antes De La Finalización
Esta respuesta no se completó antes de que la pregunta fue cerrado por los moderadores por ser demasiado amplia. El OP presentó un más refinado de la consulta como una nueva pregunta. La continuación de esta respuesta puede ser visto allí, publicado como una solución a la nueva pregunta.
Acciones De Carpeta
Necesito el script para que se ejecute cuando se crea una carpeta o un archivo es añadido
Esta es una carpeta de la acción. Una carpeta acción puede ser creado en una de dos maneras: a través de Automator, o por vía de una carpeta de secuencia de comandos de acción.
Para obtener información sobre cómo crear una carpeta de secuencia de comandos de acción, que yo diría que es probablemente la solución más adecuada en este caso, usted puede desear leer el Mac Automation Scripting Guide - Watching Folders
, que los detalles de cómo hacer esto.
La Manipulación De Texto
Compruebe el nombre y validar a mi específicos de la convención de nomenclatura: sin espacios – espacios se sustituyen con un carácter de subrayado; sin guiones guiones son reemplazados con caracteres de subrayado; no hay signos – y se sustituye con "y", que también deben ser separados de palabras con un carácter de subrayado.
Este tipo de texto normal de la manipulación es, afortunadamente, bastante sencillo, y AppleScript proporciona una propiedad llamada text item delimiters
que-como su nombre deduce-delimita el texto, y se divide una cadena en distintos text items
donde se encuentra uno de los delimitadores. Por ejemplo, dado un trozo de texto que lee "For one, other than Boris, no one else is looking forward to another round; for another, everyone else has already left."
, se puede dividir en cada coma por la configuración de la text item delimiters
a ","
y recuperar la lista de text items
:
set sentence to "For one, ..." --> see above for full text
set AppleScript's text item delimiters to ","
get the sentence's text items
La lista devuelta contendrá {"For one", " other than Boris", " no one else is looking forward to another round; for another", " everyone else has already left."}
.
Sin embargo, podría haber fácilmente se ha establecido la text item delimiters
a la palabra "one"
, que sería dividir la frase en cada ocurrencia de "one"
, ya sea como una sola palabra, o si se encuentra como parte de otra palabra. La lista de text items
en esa situación tendría este aspecto: {"For ", ", other than Boris, no ", " else is looking forward to another round; for another, every", " else has already left."}
.
El mismo delimitadores pueden ser utilizados para unir texto juntos, el pegado de la text items
mediante la inserción de la delimitador entre cada uno de los elementos constitutivos.
Tenga en cuenta que, cuando los delimitadores se utiliza para dividir una cadena, se borra el delimitador de sí mismo a partir de la cadena durante la división. Por lo tanto, podemos utilizar la división y unirse a la función de text item delimiters
para eliminar los elementos de texto que no son deseables, y insertar reemplazos en su lugar. Por ejemplo, se puede reemplazar todas las comas con saltos de línea:
set sentence to "For one, ..."
set AppleScript's text item delimiters to ", "
set clauses to the sentence's text items
set AppleScript's text item delimiters to linefeed
set |lines| to clauses as text
|lines|
ahora contendrá una cadena que tiene un formato como este:
"For one
other than Boris
no one else is looking forward to another round; for another
everyone else has already left."
Para sus necesidades específicas, teniendo cada uno de los criterios y su aplicación a la variable input
que contienen la cadena ser ajustado:
los espacios se sustituyen con un carácter de subrayado;
set AppleScript's text item delimiters to space
set input to the input's text items
set AppleScript's text item delimiters to "_"
set input to the input as text
los guiones son reemplazados por guiones bajos
En lugar de escribir las mismas cuatro líneas de nuevo, podemos combinar delimitadores en una lista si lo hacemos a conciencia. Por lo tanto, aquellos cuatro líneas arriba puede ser reemplazado con estas cuatro líneas:
set AppleScript's text item delimiters to {space, "-"}
set input to the input's text items
set AppleScript's text item delimiters to "_"
set input to the input as text
y que la aplicación de criterio dentro de la misma barra.
y es reemplazado con "y", que también deben ser separados de palabras con un carácter de subrayado
Esto requiere dos pasos: primero, reemplazar cualquier &
con _&_
; a continuación, reemplace &
con and
.
No voy a escribir que poco a poco, porque es laborioso y repetitivo. Esto, sin embargo, nos da un indicio de que probablemente podemos hacer uso de la naturaleza repetitiva de esta tarea para condensar el AppleScript código en menos líneas con la ayuda de un repeat
de bucle. Voy a dejar de leer los bucles, y por ahora se presentan con el código resultante que transforma el texto como por la fijación de criterios:
set tids to {{"_", space, "-"}, {"_&_", "&"}, {"and", "&"}, ""}
repeat with tid in tids
set input to text items of the input as text
set my text item delimiters to tid's contents
end repeat
Visualización De Alertas
Me gustaría ofrecer un diálogo de error que explica también para el usuario lo que estaba mal con su nombre y también ofrecen una oportunidad para que el usuario sustituya (a través del cuadro de texto) y volver a validar.
Visualización de alertas y cuadros de diálogo se lleva a cabo por medio de los comandos display alert
y display dialog
. El último es el más apropiado en este caso, ya que tiene una funcionalidad adicional a una simple alerta, permitiendo la entrada de usuario, así:
set my text item delimiters to {"˽", space}
set marked to text items of input as text
set my text item delimiters to {"-͎", "-", "-"}
set marked to text items of marked as text
set my text item delimiters to {"&͎", "&"}
set marked to text items of marked as text
set message to ["[Folder]: ", marked, linefeed, linefeed, ¬
"The following characters were found in the filename ", ¬
"and should be replaced: ⟨space⟩, \"-\" ⟨hyphen⟩, \"&\" ⟨ampersand⟩.", ¬
linefeed, linefeed, "By default, these characters will be replaced ", ¬
"with underscores, or you can make your own edits below and ", ¬
"revalidate the filename."] as text
display dialog message ¬
with title ("File/Folder name validation") ¬
default answer output ¬
buttons {"Rename", "Don't Rename"} ¬
default button 1 cancel button 2 ¬
with icon (path to resource "Finder.icns" in bundle application "Finder")
Esto muestra un cuadro de diálogo que se parece a esto:
Sería de gran ayuda si el error de diálogo también se incluye un "ignorar" la función de sobrescribir este script y añadir el archivo o crear la nueva carpeta de todos modos.
Este es implícita una consecuencia de la cancelación del diálogo, por lo tanto nada especial que necesita ser hecho.
Los controladores
Si el usuario realiza una modificación a la propuesta de cambio de nombre, el nombre del archivo deberá ser revalidados. En lugar de copiar y pegar código idéntico a un número indeterminado de veces, podemos encuadrar las partes pertinentes de código dentro de un handler
(o función) que podemos llamar como y cuando tenemos que ejecutar las líneas específicas.
En AppleScript, controladores de comenzar con la palabra on
o de la palabra to
y hay varias sintaxis para declarar los parámetros que permiten enviar información a un controlador si es necesario, igual que se aplica una función a un conjunto de datos. Usted querrá leer sobre esto en su propio tiempo.