I'm creating a folder action to display a notification when a new file is downloaded and would like the notification to display the filename. I can't figure out how to extract the filename of the downloaded file and pass it on to the variable.
Automator: Get filename
automationautomatorfolder-action
Related Solutions
Using launchd, you could save a property list like this in ~/Library/LaunchAgents/ and load it with something like launchctl load ~/Library/LaunchAgents/automator_test.plist
or by logging out and back in.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>automator_test</string>
<key>ProgramArguments</key>
<array>
<string>automator</string>
<string>/Users/username/Desktop/Test.workflow</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/username/Desktop/</string>
</array>
<key>StartInterval</key>
<integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>
Launchd only detects changes to files when they are saved atomically (or deleted and recreated every time they are saved). Most OS X apps perform atomic saves, but for example TextMate and vim don't.
I've tried with Automator without succeeding looping through dropped files.
Here's a folder action script that does what you want, and how to attach it to a folder :
1. Open AppleScript Editor
2. Paste the following script into a new document
property mail_subject : "An image for you"
property mail_plain_content : "Attached you will the image you required." & return & return & "Best Regards" & return & "Automator"
property mail_html_content : "Attached you will the image you required.<br><br>Best Regards<br>Automator"
on adding folder items to this_folder after receiving these_items
processItems(these_items)
end adding folder items to
on processItems(these_items)
repeat with i from 1 to (count of these_items)
set this_item to item i of these_items
if isFolder(this_item) then
processItems(getFolderItems(this_item))
else
processFile(this_item)
end if
end repeat
end processItems
on processFile(this_file)
set mail_address to RemoveExtension(getFileName(this_file))
tell application "Microsoft Outlook"
set newMessage to make new outgoing message with properties {subject:mail_subject, plain text content:mail_plain_content, content:mail_html_content}
tell newMessage
make new recipient with properties {email address:{address:mail_address}}
make new attachment with properties {file:this_file as alias}
send
end tell
activate
end tell
end processFile
on isFolder(this_item)
tell application "System Events" to return (exists folder (this_item as string))
end isFolder
on RemoveExtension(this_name)
-- This function comes from :
-- http://www.macosxautomation.com/applescript/sbrt/index.html
if this_name contains "." then
set this_name to (the reverse of every character of this_name) as string
set dot_offset to the offset of "." in this_name
set this_name to (text (dot_offset + 1) thru -1 of this_name)
set this_name to (the reverse of every character of this_name) as string
end if
return this_name
end RemoveExtension
on getExtension(this_name)
if this_name contains "." then
set this_name to (the reverse of every character of this_name) as string
set dot_offset to the offset of "." in this_name
set this_name to (text 1 thru (dot_offset - 1) of this_name)
set this_name to (the reverse of every character of this_name) as string
return this_name
else
return ""
end if
end getExtension
on getFileName(this_file)
tell application "Finder" to return name of this_file
end getFileName
on getFolderItems(this_folder)
tell application "Finder" to return items of this_folder
end getFolderItems
3. Save it in your ~/Library/Scripts/Folder Action Scripts Folder
Menu File > Save
Go to the right folder : press cmd+G and paste:
~/Library/Scripts/Folder Action Scripts
and click Go
Save as : Image - Email using name as address.scpt (for example)
Format : Script
4. Create a new folder that will be watched for added items
5. Associate the script to the folder
In the Finder, right click on your folder, then select Services > Folder Actions Setup Select the new created Image - Email using name as address.scpt script
You're done, drop a file whose name is an address, mail will be sent.
Related Question
- How to get the amount of selected files in automator
- Folder action with Automator file search
- How to pass path of selected file from Finder to Automator Shell script
- Remove delimiter section from filename with Automator
- Automator workflow to split PDF
- Dynamically loading an Automator action based on a filename
- MacOS – Firefox on MacOS: Default filename when downloading
- Apple Automator: where does it store a new filename
Best Answer
Try something like this:
Transcript:
Folder action receives files and folders to Downloads(default Folder Action script)
Run Applescript:
on run {input, parameters} tell application "Finder" set filename to name of file input end tell end run
Set value of Variable: fileName
Ask for Confirmation: Title: Alert! The file fileName has been downloaded! Body: A new file has downloaded
So if I add a file named "NewFile.png", I get: