I can up with this but there is no lowercase option.
Try this:
- Change the For Each “Variable” to “FilePath”
- Split FilePath into ParentPath and FileName
- Use Variable Filter to make FileName lower case
- In the Move Block: %Variable%FilePath%
- In the to Block: "%Variable%ParentPath%/%Variable%FileName%
That may not be perfect, but should give you some ideas on how to build the macro.
Hey Michael,
Thank you for your response.
Can you expand on pint 2, how do I split the file path variable?
Obviously you can't use the same variable for both.
No need to get the parent path because you can rename from a path to a file name if you don’t want to move the file.
So basically:
- For Each FilePath in Finder Selection
- Get File Attribute: File Name to variable FileName
- Filter: Lower Case variable FileName
- Rename %Variable%FilePath% to %Variable%FileName%
Unfortunately, while this looks like it should work, it actually will not because the file system is case insensitive and so a file with that name already exists (namely the file you are renaming to).
So you have to rename the file away, and then rename it back which does indeed require the parent path. Something like:
- For Each FilePath in Finder Selection
- Get File Attribute: File Name to variable FileName
- Get File Attribute: Parent Path to variable ParentPath
- Filter: Lower Case variable FileName
- Rename %Variable%FilePath% to %Variable%ParentPath%/temp
- Rename %Variable%ParentPath%/temp to %Variable%FileName%
I'm just curious, if you don't mind. Why bother to make all files lowercase?
For me it is just a personal preference. It just looks better.
Maybe a simpler alternative in this case would be with an AppleScript:
use framework "Foundation"
tell application "Finder"
set theSelection to the selection
repeat with i in theSelection
set name of i to lowercaseString() of (current application's NSString's stringWithString:(i's name)) as text
end repeat
end tell
Oh wow, Tom, as I was struggling to implement Piter’s solution, here you give a one applescript solution that works perfectly.
Thanks for that. And for Piter’s and Michael’s help too.
The downside of the AppleScript solution is that it doesn’t help you learn how to use KM.
True, but the AppleScripted Finder solution is faster and easier unless the file-count is over about 500 or so.
A couple of edits:
use framework "Foundation"
tell application "Finder"
set finderSelectionList to the selection as alias list -- most important change (faster than Finder references)
repeat with theItem in finderSelectionList
set name of theItem to (lowercaseString() of (current application's NSString's stringWithString:(theItem's name))) as text -- improve clarity of what is coerced to text
end repeat
end tell
-Chris
Thanks for improving the script, Chris.
Hey Christopher,
Can you help me make sense of what I might have done wrong with this script? I want to move selected files to /Applications folder.
tell application "Finder"
set finderSelectionList to the selection as alias list -- most important change (faster than Finder references)
repeat with theItem in finderSelectionList
move theItem to POSIX file "/Applications"
end repeat
end tell
Not Christopher, but your script works fine for me.
However, you don’t need POSIX paths, and it can be written a bit simpler:
tell application "Finder"
set finderSelectionList to the selection as alias list
move finderSelectionList to (path to applications folder)
end tell