我在Finder中选择了一个或多个文件和/或文件夹。我手动将它们复制到剪贴板/粘贴板(⌘C)。
为了简单起见,假设我只复制了一个普通文件。但是,理想的解决方案是处理许多文件以及带有文件夹,别名的混合选择。
现在这个文件在剪贴板上,我希望得到它的完整路径(最好是POSIX路径)。
节省您的时间:
到目前为止我所知道的(在rb-appscript中注明):
OSAX.osax.the_clipboard
有一串没有路径的文件名。Appscript.app('Finder').clipboard.get
显然没有实现(字典说“不可用”;调用它会返回:missing_value
。答案 0 :(得分:2)
以下AppleScript似乎可以解决这个问题:
POSIX path of (the clipboard as «class furl»)
如果剪贴板上有多个项目,它将仅返回第一个项目的POSIX路径。
另请参阅AppleScript command reference命令the clipboard
。
rb-appscript版本:
OSAX.osax.the_clipboard(:result_type => :file_url).path
答案 1 :(得分:2)
这是一个可以从剪贴板获取所有posix路径的AppleScript,而不仅仅是第一个...
set theFiles to paragraphs of (get the clipboard)
set posixPaths to {}
repeat with aFile in theFiles
try
tell application "Finder" to set thePath to item aFile as text
set end of posixPaths to (POSIX path of thePath)
end try
end repeat
return posixPaths
答案 2 :(得分:0)
以为我会分享我在sakra回答后写的rb-appscript代码:
#!/usr/bin/arch -i386 /usr/bin/ruby
require "rubygems"
require "osax"
include OSAX
def path_from_clipboard
osax.clipboard_info.flatten.include? :file_url or raise "clipboard does not contain path data"
osax.the_clipboard.count("\r") == 0 or raise "clipboard contains more than one path"
osax.the_clipboard(:result_type => :file_url).path
end
puts path_from_clipboard
答案 3 :(得分:0)
Finder就是这样,而AppleScript就是它的样子,它太过于无法解决。那么,到底是什么,我跳进了可可。
这些脚本中的任何一个都将在新行上返回绝对路径列表。
的MacRuby:
#!/usr/bin/env macruby
# encoding: UTF-8
framework 'Cocoa'
puts NSPasteboard.generalPasteboard.pasteboardItems
.map { |pbi| pbi.stringForType('public.file-url') }.compact
.map { |url| NSURL.URLWithString(url).path }
女:
#!/usr/bin/env nush
(puts ((((((NSPasteboard generalPasteboard) pasteboardItems)
map: (do (pbi) (pbi stringForType: "public.file-url")))
select: (do (url) (url)))
map: (do (url) ((NSURL URLWithString: url) path))) componentsJoinedByString: "\n"))
答案 4 :(得分:0)
我一直在寻找一种解决方案,该解决方案可以复制Finder中所选文件的路径。这是我想出的:
set ASTID to AppleScript's text item delimiters --——>>
set AppleScript's text item delimiters to return
tell application "Finder" to set sel to the selection as text
set listPaths to {}
repeat with pth in paragraphs of sel
set end of listPaths to POSIX path of pth
end repeat
set listPathsClipboard to listPaths as text
set AppleScript's text item delimiters to ASTID --——<<
set the clipboard to listPathsClipboard