【问题标题】:Automator: how to obtain the filename from a Finder object or from VariableAutomator:如何从 Finder 对象或变量中获取文件名
【发布时间】:2021-03-16 19:46:43
【问题描述】:

这应该很容易。

我们公司的文件名使用这种格式:yyyymmdd.brand.customername.pics

目标:为每个 FILE 新建一个同名的 FOLDER,不带文件扩展名。

自动化目标示例
源文件:20210301.ABC.Jones.pics(文件)
目标结果:20210301.ABC.Jones(文件夹)

我一直在尝试获取排除路径的源文件的名称,但没有成功。

我的自动化是一个文件夹操作(以下是相关步骤)

  1. 当文件放入特定文件夹时,设置变量 TPEPathname = 文件名(带路径)
  2. 从步骤 1 中获取变量 TPEPathname 的值,将值传递到下一步。
  3. 使用 Get Selected Finder Items 获取对文件的引用,将 Finder 对象的引用传递到下一步
  4. 运行 AppleScript 以获取 Finder 对象文件名的名称,不包括路径(AppleScript 参见附图)

步骤 3 成功。第 4 步不返回任何内容。 (忽略文件名)

我还尝试通过将 TPEPathname 直接传入 AppleScript 来更改序列,而不是传入 Finder 对象。结果相同 - 第 3 步成功,第 4 步不返回任何内容。

问题: 我是否将步骤 3 Finder 对象正确地引用为 AppleScript 中的 INPUT 或 PARAMETER? “输入”的值似乎为空。我没有看到有关如何传入或引用 AppleScript 参数的文档。

AppleScript 中的“fileName”函数会真正获取并解析没有路径的文件名,还是文件名中的附加句点会导致问题?可接受的结果将是: yyyymmdd.brand.customername 或 yyyymmdd.brand.customername.pics

【问题讨论】:

  • input 是一个别名说明符列表。至少您需要一个循环来分别处理每个文件。除此之外,别名不会响应fileName。您将显示fileName 而不是fileNamex。所以有3个语法错误。
  • 一次只有一个文件被传入AppleScript;不需要循环。如果我传入别名,我应该传入什么,或者我应该使用什么函数从别名中提取名称?我已显示 fileName 以验证它是否为 NULL,因此这不是实际的语法错误 - 它是用于测试的修订版:fileName 和 fileNameX 均为 NULL(并且我在上面指出忽略 fileNameX)
  • 无论选择了多少文件Get Finder Items 都会始终将别名说明符列表传递给下一个操作(或一个空列表)。您只能使用 FinderSystem Events 从别名中获取文件名。第一行 display dialog input 已经是语法错误。直接参数必须是text
  • 知道了。解释这些的参考文档在哪里?

标签: applescript automator


【解决方案1】:

如果我正确阅读了您的 OP,您想使用 Folder Action,当 file 被删除时,基于 folderfilename 上创建没有 扩展名folder 分配给 Folder Action ,然后将拖放的文件移动到由其名称创建的文件夹中。

如果这就是你想要做的所有事情,那么下面的 文件夹操作 使用 Run Shell 脚本 actionPass input: [as arguments] 正是这样做的。没有必要把事情复杂化!

换句话说,您将 文件 名称,例如 20210301.ABC.Jones.pics 放到 文件夹 文件夹操作 附加到并在 文件夹 文件夹操作中创建一个名为 20210301.ABC.Jones文件夹 附加到,然后 20210301.ABC.Jones.pics 文件 被移动到 20210301.ABC.Jones 文件夹

示例 shell脚本 代码

    # f  = fully qualified pathname
    # d  = directory pathname
    # fn = filename with extension
    # n  = filename without extension

for f in "$@"; do
    [ -f "${f}" ] || continue
    d="${f%/*}"
    fn="${f##*/}"
    n="${fn%.*}"
    cd "${d}" || exit
    [ ! -d "${n}" ] && mkdir "${n}"
    mv -n "${f}" "${n}"
done  


注意事项

  • mv 命令 中使用的-n 选项 停止覆盖现有的文件。如果您希望覆盖现有的文件,请删除mv 命令 中使用的-n 选项。李>
  • 编码后的 shell 脚本可以处理同时删除的多个文件或一次只处理一个文件

【讨论】:

  • 在纸上看起来很棒 - 但什么也没做。此外,是否可以将值返回给我的 Automator 脚本?下一步是获取FILE的内容(显示包内容)并将它们放入新的FOLDER中。为此,我需要源和目标的句柄。
  • 另外 - 我在大苏尔。隐私模型问题?我为全盘访问启用了 Automator。还有其他设置吗?
  • @torpedo5,我发布的代码完全按照我说的做!!!如果这对您不起作用,那是因为 IMO 您的问题不完整并且缺乏完整的细节。如果问题有必要的信息,我可以编写代码来做任何必要的事情!
  • 我确信它完全按照您所说的进行。由于我的 Automator 脚本中还没有 ShellScript 步骤,因此我将受益于任何允许此类步骤工作的相关设置或说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2013-01-25
相关资源
最近更新 更多