Wait for a Volume to Mount or Unmount/Eject in AppleScript

In working with Alfred, I've created a workflow that loads files from a Volume (DMG) file. In order for this to work correctly, I need the script to wait until the volume is actually loaded and visible in Finder before continuing.

This can be done a few different ways, but here is the AppleScript code I'm using which works with Alfred or Keyboard Maestro. It's based on several examples I found.

The first script gets the name of the mounted volumes and keeps looping until the expected volume shows up in the list.

The second script is the opposite. It keeps looping and trying to eject the disk until the name isn't in the list of mounted volumes.

Wait for Volume to be Mounted

set mountedDisk1 to list disks
set thevolume1 to "Insert Volume Name Here"
set wasmounted to false
set counter to 0
set max_number_of_iteration to 30

--activate
--use activate to bring dialog to front
if mountedDisk1 contains thevolume1 then
    set wasmounted to true
end if

if wasmounted is false then
    delay 1
    tell application "Finder"
        if (not (exists (disk thevolume1))) then
            repeat until (mountedDisk1 contains thevolume1 or counter is greater than max_number_of_iteration)
            set mountedDisk1 to list disks
            if mountedDisk1 contains thevolume1 then
                --successful
            end if
            delay 1
            set counter to counter + 1
            end repeat
        end if
    end tell
end if

Wait for Volume to be Unmounted/Ejected

set mountedDisk1 to list disks
set thevolume1 to "Insert Volume Name Here"
set wasmounted to false
set counter to 0
set max_number_of_iteration to 30

--activate
--use activate to bring dialog to front
if mountedDisk1 contains thevolume1 then
    set wasmounted to true
end if

if wasmounted is true then
    delay 1
    tell application "Finder"
    eject disk thevolume1
        if ((exists (disk thevolume1))) then
            repeat until (mountedDisk1 does not contain thevolume1 or counter is greater than max_number_of_iteration)
            set mountedDisk1 to list disks
            if mountedDisk1 contains thevolume1 then
                eject disk thevolume1
            end if
            delay 1
            set counter to counter + 1
            end repeat
        end if
    end tell
end if

Adapted from:
https://macscripter.net/viewtopic.php?id=29886
https://stackoverflow.com/questions/14266855/applescript-to-mount-drive-and-once-finished-report-if-successful

Other articles of interest:

Leave a Reply

Your email address will not be published. Required fields are marked *

Recent Comments
  • How To Disable the Quicken Registration Prompt (31)
    • Juani: Hi, I have a registered Quicken 2016 and now my files are being held hostage by Intuit, cannot log in with my ID unless I upgrade therefore buy a subscription, I need to access my files, please HELP. Thanks
    • David: A BIG Thank you! I regularly reinstall Windows OS’s using different hardware configs. In short, Quicken 2011 (it’s March of 2020 as I write this) has been a program I’ve been very happy with and continue to use....
    • Karen L: Today I rang Reckon Australia again, got a different guy and he talked me through the process of getting me a new product key to enter since I already had the licence and it had been extended. Reckon have only extended it by 1...
    • Karen L: I have Australian Quicken 2008 on Windows 8.1. It keeps asking me to renew my licence which Reckon did for me however the activation won’t work. I tried this to disable the registration prompt however it did not stop the...
  • Building Relationships with Developers (1)
    • Carlos Herrera: Ah yes. I have a team of software developers and it is genuinely so hard to keep them in the loop during projects. Though the more we work the better the communication becomes and we go from a trail and error process to a...
  • Integrating DevonAgent Pro with Alfred (1)
    • J. Garr: Beautiful, sweet, and simple. I love it; thanks for posting this solution.
  • Round and Round with the For..Next in Katalon Studio (1)
    • Sweet Ophaline Labador: Hello can you help me how to loop this scenario. Checking the elements is just the same. I want to check that the following function is available in www.siacargo.com: Track Shipment – clicking on this can...
  • Parsing Strings in Katalon – Split, Substring and Readlines (6)
    • Don Pedro: String tempText=”Date Month January. Revenue $1,355,721.00″ println(tempText.split(“ \$”)[1]) You need to escape the $ with \$ The [1] on the split captures characters on the right of the split [0]...
    • Prasad: Hi, I need to get the substring from the below string ‘Date Month January. Revenue $1,355,721.00’ I want to extract text after $ value. Please help Thank you
  • Working with Dates and Date Formatting in Katalon Studio (15)
    • Sangeethaa: How to get previous day’s date(Yesterday’s date)? Actually I was using today.previous() before,it was working fine till today morning.Now its not retrieving right date. Can anyone please guide me on this.
    • Don Pedro: That could be a little tricky. First, is the text/format always going to be the same? You will need to do some parsing. Separate the first but of text at 2019. After that, split the text again to get rid of Central Standard...
    • Don Pedro: It should be of the same Date type as today. You could then do some calendar trickery with Calendar /*Calendar c = Calendar.getInstance(); //c.set(Calendar.MONTH, 1) //Set the month, 0=January, 11=December println...
    • josh: I’m testing a page with a string like “Updated November 21, 2019 16:25:32 PM Central Standard Time.” How might I capture the date and time and compare it to current time to verify that the update time was within...
  • Output status messages and test information by writing to the Log File Viewer in Katalon Studio (6)
    • Saranya: Good One. Could you plz share link to access all your katalon related blogs. ThankQ
    • Rodrigo Calabretta: I’m using the KeywordUtil.markFailed or KeywordUtil.markError and my test stops is being shown as Error and If I use in the @afterTestCase the testCaseContext.getTestCaseSta tus() to show the status test case...