【问题标题】:Exchange filename position交换文件名位置
【发布时间】:2021-11-08 02:56:14
【问题描述】:

我想在 FolderX 中交换一个文件的数百个文件名位置。

文件名都是这样创建的:pos1.pos2.pos3.pos4.pos5.pos6.pdf 示例:(GK.19.kkla.0715.nr.36053342.zg.119.pdf)

我想交换一些位置,使其变为:pos4.pos2.pos5.pos6.pos3.pos1.pdf

例如,一个命令,例如;交换 pos3->pos6 或 pos1->pos4

我查看了Automator,但它只能在文件名之前或之后添加,但不能交换位置。

也许是 AppleScript?感谢您的意见。

【问题讨论】:

    标签: macos applescript automator


    【解决方案1】:

    以下解决方案使用 AppleScript 的文本项分隔符和系统事件。它非常快,并且具有避免在文件夹中某些文件的文件名与所需模式不匹配时引发错误的优点。此外,它适用于文件夹的 pdf。

    set folderHFS to (choose folder) as text
    
    set {ATID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "."}
    tell application "System Events"
        repeat with aFile in (get files of folder folderHFS whose name extension is "pdf")
            try
                set {pos1, pos2, pos3, pos4, pos5, pos6, ext} to text items of (get name of aFile)
                set name of aFile to {pos4, pos2, pos5, pos6, pos3, pos1, ext} as text
            end try
        end repeat
    end tell
    set AppleScript's text item delimiters to ATID
    

    【讨论】:

    • 正是我想要的。 1. 易于使用。 | 2. 它适用于各种扩展(pdf、txt、jpg)| 3. 作为输出,我只写了我需要的 4 个,它可以工作 - 非常感谢!!!
    • 是否可以将不同长度的可变位置作为位置的输入?举个例子;一些输入文件有 6 个位置,其中一些有 9 个位置。对于输出文件,我可以选择我需要的 2 个或 3 个位置,但输入必须是确切的位置数?
    • 一个想法是将它放入一个处理程序中,而不是硬编码文本项,而是提供一对索引来交换参数。
    • red_manace;以及如何做到这一点?可以举个例子吗,谢谢
    【解决方案2】:

    SO 不是代码编写服务;也就是说:您可以使用 AppleScript(脚本 Finder/系统事件来遍历文件和文本项分隔符以拆分每个文件名),或者您可以使用 shell 脚本来执行此操作,其优点是更快:

    #!/bin/sh
    
    for f in /path/to/input/folder/*; do
        n=`basename "$f" | awk -F '.' '{ print $4"."$2"."$5"."$6"."$3"."$1".pdf" }'`
        mv "$f" "/path/to/output/folder/$n"
    done
    

    【讨论】:

    • 工作正常,我必须很少更改它以避免每次手动写入源和输出文件夹(我只是制作;(对于“${@}”中的 f 做....)没关系,但是最后,他仍然搜索输出文件夹并且使用命令 ${@/n} 不起作用,非常感谢您的输入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多