Applescript:获取文件夹中不带扩展名的文件名
我可以通过执行以下操作获取文件夹中所有文件的名称:
tell application "Finder"
set myFiles to name of every file of somePath
end tell
How can I Change the strings in myFiles
so that those do not include the file extension?
例如,我可以获得 {"foo.mov", "bar.mov"}
,但想要 {"foo", "bar"}
。
当前的解决方案
根据已接受的答案,我想出了下面的代码。让我知道是否可以以某种方式使其更清洁或更高效。
-- 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)
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
来自 http://www.macosxautomation.com/applescript/sbrt/index.html:
From http://www.macosxautomation.com/applescript/sbrt/index.html :
单行方式执行此操作,没有 Finder,没有系统事件。因此更高效、更快。副作用(可能是好,也可能是坏):文件名以“.”结尾。将删除该字符。如果名称超过一个句点,则使用“每个字符反转”可以使其起作用。
作为处理名称列表的处理程序的解决方案:
Single line way of doing it, no Finder, no System Events. So more efficient and faster. Side effect (could be good, or bad): a file name ending with "." will have this character stripped out. Using "reverse of every character" makes it works if the name as more than one period.
The solution as a handler to process a list of names:
这是一个苹果脚本式的方法,可以让 Finder 了解被剥离的文件名是什么,但请注意,只有当您没有在 Finder 的首选项中启用“显示所有文件扩展名”选项时,它才有效:
Here's an applescriptish method to get Finder's idea of what the stripped filename is but please note it will only work if you have NOT enabled the option in Finder's preferences to "Show all filename extensions":
这是一个完整的脚本,可以完成您想要的操作。我最初不愿意发布它,因为我认为有人会提供一些简单的单行作为解决方案。希望这个解决方案不是 Rube Goldberg 的做事方式。
Finder 字典确实有一个名称扩展属性,因此您可以执行以下操作:
因此,上面的操作将为您提供用户桌面上第一个文件的扩展名。似乎有一个简单的函数可以获取(基本名称 - 扩展名),但我没有找到。
这是用于获取整个目录中每个文件的文件名而不带扩展名的脚本:
虽然上面的脚本确实有效,如果有人知道一种更简单的方法来执行OP想要的操作,请发布它,因为我仍然觉得应该有一个更简单的方法。也许添加脚本也可以促进这一点。有人知道吗?
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:
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:
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?
基于 Lauri Ranta 的不错的解决方案,适用于以下扩展Finder 不知道:
Based on Lauri Ranta's nice solution, which works for extensions that Finder doesn't know about:
我不知道当您使用“每个文件”时如何删除扩展名
语法,但如果您不介意循环(示例中未显示循环)每个文件,那么这将起作用:
I don't know how to remove the extensions when you use the "every file"
syntax but if you don't mind looping (loop not shown in example) through each file then this will work:
在告诉“Finder”块中,这会收集在 myNames 中去掉扩展名的文件名:
Within a tell "Finder" block this collects file names stripped of the extension in myNames:
对于单个文件,我在此处找到了答案,复制如下。
For a single file I found the answer here, copied below.
这比您需要的多一点,但它可以处理多个“。”在文件名中。
假设将文件别名传递给该方法。
This is a little more than you need, but it will handle more than one "." in a file name.
Assuming that a file alias is passed in to the method.