Hao Xiao
Hao Xiao

Reputation: 83

AppleScript choose file or folder

can I use AppleScript to choose either file or folder in one time?

Now I could use

tell application "SystemUIServer" to return POSIX path of (choose file)

or

tell application "SystemUIServer" to return POSIX path of (choose folder)

to get file or folder. However I cannot get file or folder in one time.

Upvotes: 6

Views: 12612

Answers (2)

Nicholas Riley
Nicholas Riley

Reputation: 44321

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 (derived from here):

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 of NSURL objects into an AppleScript list of files; the results can look something like:

{file "Macintosh HD:Users:nicholas:Desktop:fontconfig:", file "Macintosh HD:Users:nicholas:Desktop:form.pdf"}

Upvotes: 6

CRGreen
CRGreen

Reputation: 3444

Firstly, you don't need a tell for that.

POSIX path of (choose file)

Secondly, it is not clear why you need this. Do you mean you want to select a file and it's folder? That's not how you do it; you select the file then parse the file path for the containing folder or use one of the many methods to do that, like

set f to (choose file)
set posixF to POSIX path of f
tell application "Finder" to set filesDir to container of f as alias as text
set posixDir to POSIX path of filesDir

{f, posixF, filesDir, posixDir}

If you want to be able to select multiple folders and files at the same time, I don't think there is a "pure applescript" way to do this (aside from using a drag-drop aware script application).

Upvotes: -1

Related Questions