Ho un compito piuttosto complesso da risolvere. Non utilizzo OS X, ma ora devo fornire ad alcuni colleghi una semplice applicazione che copia automaticamente un determinato file in una cartella di rete. Normalmente userei uno script di shell, ma in questo caso alcune interfacce grafiche minimali sono una cosa assolutamente da avere. Quindi pensavo di poter usare AppleScript.
Dovrei eseguire questi passaggi:
- Connessione a un'unità di rete (
smb://myserver/public
, in cui ogni utente ha nomi di accesso e password diversi, quindi il cablaggio dei nomi utente e delle password nel codice non è un'opzione). - Passare a una cartella sull'unità di rete (ogni utente ha una cartella diversa sull'unità di rete).
- Copia un determinato file dal desktop dell'utente nella cartella aperta sull'unità di rete.
Quindi, quando si esegue lo script, l'utente deve inserire il proprio nome utente e password per connettere l'unità di rete e l'utente deve inserire il nome della cartella in cui copiare il file. Il nome della cartella può essere memorizzato in modo permanente in qualche modo? Quindi l'utente non dovrà inserire il nome della cartella ogni volta che esegue questo script. Ma di tanto in tanto queste cartelle possono cambiare, quindi ci deve essere un'opzione per cambiare la cartella prima di copiare. Inoltre, come posso verificare se l'unità di rete è già montata, quindi all'utente non verrà richiesto nome utente e password ogni volta che esegue questo script?
Ecco fino a che punto sono riuscito ad assemblare uno script per svolgere questo compito:
Non riesco a capire come AppleScript voglia memorizzare un percorso su un file / cartella su un'unità di rete montata.
Quindi ecco cosa ho ora:
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()