Search code examples
applescriptfilenamesfinder

Applescript: Get filenames in folder without extension


I can get the names of all files in a folder by doing this:

tell application "Finder"
    set myFiles to name of every file of somePath
end tell

How can I change the strings in myFiles so that they do not include the file extension?

I could for example get {"foo.mov", "bar.mov"}, but would like to have {"foo", "bar"}.


Current solution

Based on the accepted answer I came up with the code below. Let me know if it can be made cleaner or more efficient somehow.

-- Gets a list of filenames from the
on filenames from _folder

    -- Get filenames and extensions
    tell application "Finder"
        set _filenames to name of every file of _folder
        set _extensions to name extension of every file of _folder
    end tell

    -- Collect names (filename - dot and extension)
    set _names to {}
    repeat with n from 1 to count of _filenames

        set _filename to item n of _filenames
        set _extension to item n of _extensions

        if _extension is not "" then
            set _length to (count of _filename) - (count of _extension) - 1
            set end of _names to text 1 thru _length of _filename
        else
            set end of _names to _filename
        end if

    end repeat

    -- Done
    return _names
end filenames

-- Example usage
return filenames from (path to desktop)

Solution

  • Here's a full script that does what you wanted. I was reluctant to post it originally because I figured there was some simple one-liner which someone would offer as a solution. Hopefully this solution is not a Rube Goldberg way of doing things.

    The Finder dictionary does have a name extension property so you can do something like:

    tell application "Finder"
       set myFiles to name extension of file 1 of (path to desktop)
    end tell
    

    So the above will get you just the extension of the first file on the user's desktop. It seems like there would be a simple function for getting the (base name - extension) but I didn't find one.

    Here's the script for getting just the filenames without extension for every file in an entire directory:

    set filesFound to {}
    set filesFound2 to {}
    set nextItem to 1
    
    tell application "Finder"
      set myFiles to name of every file of (path to desktop) --change path to whatever path you want   
    end tell
    
    --loop used for populating list filesFound with all filenames found (name + extension)
    repeat with i in myFiles
      set end of filesFound to (item nextItem of myFiles)
      set nextItem to (nextItem + 1)
    end repeat
    
    set nextItem to 1 --reset counter to 1
    
    --loop used for pulling each filename from list filesFound and then strip the extension   
    --from filename and populate a new list called filesFound2
    repeat with i in filesFound
      set myFile2 to item nextItem of filesFound
      set myFile3 to text 1 thru ((offset of "." in myFile2) - 1) of myFile2
      set end of filesFound2 to myFile3
      set nextItem to (nextItem + 1)
    end repeat
    
    return filesFound2
    

    Though the above script does work if anyone knows a simpler way of doing what the OP wanted please post it cause I still get the sense that there should be a simpler way of doing it. Maybe there's a scripting addition which facilitates this as well. Anyone know?