Tengo una tarea bastante compleja de resolver. No uso OS X, pero ahora tengo que proporcionar a algunos colegas una aplicación simple que copia automáticamente un determinado archivo a una carpeta de red. Normalmente, usaría un script de shell, pero una GUI mínima es una necesidad en este caso. Así que pensé que podría usar AppleScript.
Tendría que realizar estos pasos:
- Conéctese a una unidad de red (
smb://myserver/public
, donde cada usuario tiene diferentes nombres de inicio de sesión y contraseñas, por lo que no es una opción el cableado de los nombres de usuario y las contraseñas en el código). - Vaya a una carpeta en la unidad de red (cada usuario tiene una carpeta diferente en la unidad de red).
- Copie un determinado archivo del escritorio del usuario a la carpeta abierta en la unidad de red.
Entonces, al ejecutar el script, el usuario debe ingresar su nombre de usuario y contraseña para conectar la unidad de red, y el usuario debe ingresar el nombre de la carpeta a la que debe copiar el archivo. ¿Se puede almacenar el nombre de la carpeta de forma permanente de alguna manera? Por lo tanto, el usuario no tendrá que ingresar el nombre de la carpeta cada vez que ejecute este script. Pero de vez en cuando estas carpetas pueden cambiar, por lo que tiene que haber una opción para cambiar la carpeta antes de copiar. Además, ¿cómo puedo comprobar si la unidad de red ya está montada, por lo que no se le pedirá al usuario el nombre de usuario y la contraseña cada vez que ejecute este script?
Aquí es hasta qué punto he podido ir en el ensamblaje de un script para realizar esta tarea:
Me cuesta entender cómo le gusta a AppleScript almacenar una ruta a un archivo / carpeta en una unidad de red montada.
Así que aquí está lo que tengo ahora:
property userName : "myfolder"
property folderName : "myusername"
property serverName : "public"
property serverAddress : "smb://myserver/public"
property serverStatus : 0
on connectToServer()
global userName
global folderName
global serverName
global serverAddress
global serverStatus
set mountedDisks to list disks
if mountedDisks does not contain serverName then
mount volume serverAddress as user name userName with password (display dialog "Enter password for" & quoted form of serverName with title "" default answer "" giving up after 3 with hidden answer)
end if
set mountedDisks to list disks
if mountedDisks contains serverName then
set serverStatus to 1
else
connectToServer()
end if
end connectToServer
on mainLoop()
global userName
global folderName
global serverName
global serverAddress
global serverStatus
if serverStatus is equal to 0 then
connectToServer()
end if
set mainDialog to display dialog ¬
"Your username: " & userName & "
Your folder's name: " & folderName buttons {"Quit", "Settings", "Copy file"} with title "File Copier" default button 1
set mainDialogAnswer to button returned of mainDialog
if mainDialogAnswer is equal to "Quit" then
quit
end if
if mainDialogAnswer is equal to "Settings" then
display dialog "Enter your username" with title "Step 1 of 2" default answer userName
set userName to {text returned of result}
display dialog "Enter your folder's name" with title "Step 2 of 2" default answer folderName
set folderName to {text returned of result}
mainLoop()
end if
if mainDialogAnswer is equal to "Copy" then
-- copy the file
end if
end mainLoop
mainLoop()