How do I let AppleScript choose any type of file?
Solution 1:
Can't be done
The following are different ways to prompt for files. There is no way, in pure Apple Script, to prompt for Files or Folders at the same time.
Select File:
set directory to POSIX path of (choose file with prompt "File Location:" default location (path to desktop))
Select Files:
set directory to POSIX path of (choose file with prompt "File Location:" default location (path to desktop) with multiple selections allowed)
Select Folder:
set directory to POSIX path of (choose folder with prompt "File Location:" default location (path to desktop))
Select Folders:
set directory to POSIX path of (choose folder with prompt "File Location:" default location (path to desktop) with multiple selections allowed)
Select Specific Types of Files:
Prompting for a Specific Type of File
If your script requires specific types of files for processing, you can use the choose file command’s optional of type parameter to provide a list of acceptable types. Types may be specified as extension strings without the leading period (such as "jpg" or "png") or as uniform type identifiers (such as "public.image" or "com.apple.iwork.pages.sffpages"). Listing 26-3 and Listing 26-4 show how to prompt for an image.
For Images:
set directory to POSIX path of (choose file of type {"public.image"} with prompt "File Location:" default location (path to desktop) with multiple selections allowed)
Sources: Mac Automation Scripting Guide
Using AppleScriptObjC you can ask for either Files or Folders. See this answer (if the linked answer helped, please upvote the linked Q&A):
No, you can't do it with "choose file" or "choose folder" verbs, but choosing a file or folder (or multiple files/folders) is supported by the underlying
NSOpenPanel
. So you can do it with AppleScriptObjC. Here's an example using [ASObjCRunner][1] (derived from [here][2]):script chooseFilesOrFolders tell current application's NSOpenPanel's openPanel() setTitle_("Choose Files or Folders") -- window title, default is "Open" setPrompt_("Choose") -- button name, default is "Open" setCanChooseFiles_(true) setCanChooseDirectories_(true) setAllowsMultipleSelection_(true) -- remove if you only want a single file/folder get its runModal() as integer -- show the panel if result is current application's NSFileHandlingPanelCancelButton then error number -128 -- cancelled return URLs() as list end tell end script tell application "ASObjC Runner" activate run the script {chooseFilesOrFolders} with response end tell
ASObjCRunner converts a
NSArray
ofNSURL
objects into an AppleScript list offile
s; the results can look something like:{file "Macintosh HD:Users:nicholas:Desktop:fontconfig:", file "Macintosh HD:Users:nicholas:Desktop:form.pdf"}
[1]: http://www.macosxautomation.com/applescript/apps/runner.html
[2]: https://stackoverflow.com/questions/8125563/
You could use a dialog box prompting a user to select what they would like to encrypt.
display dialog "Select a type to Encrypt" buttons {"File(s)", "Folder(s)"}
set a to the button returned of the result
if a is "File(s)" then
set directory to POSIX path of (choose file with prompt "File Location:" default location (path to desktop) with multiple selections allowed)
else
set directory to POSIX path of (choose folder with prompt "File Location:" default location (path to desktop) with multiple selections allowed)
end if
Lastly, check out my answer here for a way to encrypt files with Apple Script and Automator.