Automator传递文件名异常:AppleScript路径重复问题排查
问题原因分析
你遇到的路径重复问题,核心是没正确处理Automator传递给AppleScript的input参数:
- Automator里的「服务」传递给AppleScript的
input是文件别名的列表——哪怕你只选了一个文件,它也是包含单个元素的列表,不是单个文件对象。 - 你直接执行
set f to (input as text)时,AppleScript会把列表里每个文件别名的字符串形式拼接在一起。而文件别名的字符串格式是Macintosh HD/用户目录/文件路径这种,不是标准POSIX路径,拼接后就会出现重复的路径片段。 - 后续再对这个混乱的拼接文本执行
POSIX path of f,相当于把一堆错误拼接的字符串强行转成POSIX路径,最终就出现了终端里看到的重复路径。
另外还有个隐藏问题:你的文件路径里有空格(比如Sample Videos _ Dummy Videos For Demo Use.mp4),直接把路径拼进终端命令里会被终端当成多个参数,导致命令执行失败,这个也得一起解决。
修复后的代码
下面是修正后的AppleScript,解决了路径重复和空格解析问题:
on run {input, parameters} -- 先判断是否有传入文件 if input is not {} then -- 取列表中的第一个文件(如果要批量处理可以加repeat循环遍历input) set targetFile to item 1 of input -- 把文件路径转成带引号的POSIX路径,处理空格问题 set sourcePosixPath to quoted form of POSIX path of targetFile -- 正确获取桌面的POSIX路径,避免硬写/Desktop导致的路径错误 set desktopPath to POSIX path of (path to desktop folder as text) set outputPosixPath to quoted form of (desktopPath & "FERTIG.m4v") tell application "Terminal" activate do script "/Applications/HandBrakeCLI --format av_mp4 --optimize --align-av --encoder x265 --quality 21 --vfr --first-audio --mixdown stereo --ab 192 --first-subtitle -i " & sourcePosixPath & " -o " & outputPosixPath end tell end if return input end run
关键修复点说明
- 处理文件列表:通过
item 1 of input明确获取单个文件对象,而不是直接把整个列表转成文本。如果需要批量处理多个文件,可以用repeat with fileItem in input循环遍历每个文件。 - 路径加引号:用
quoted form of包裹POSIX路径,确保路径里的空格、特殊字符能被终端正确识别,不会被拆成多个参数。 - 正确获取桌面路径:用
path to desktop folder系统命令获取用户桌面的真实路径,代替硬写的/Desktop(硬写的/Desktop是根目录下的文件夹,不是用户个人的桌面)。
内容的提问来源于stack exchange,提问作者CodierGott
相关产品推荐
相关产品推荐

