Javascript Applescript可归档一组文件

Javascript Applescript可归档一组文件,javascript,bash,shell,applescript,Javascript,Bash,Shell,Applescript,我在自学编程。我需要一个特定功能的帮助。我希望在applescript中编写此代码,以便在Automator中使用此脚本。我也对shell或javascript解决方案持开放态度 输入 我有一系列的文件夹,在那里我重命名了所有的文件。以下是相关信息: 始终会有一个名为main.png的文件 始终会有一个名为tab.png的文件 有一组不同的图像,从01.png开始递增编号。例如: 01.png 02.png 03.png ... 30.png 我想构建一个脚本,根据以下规则归档文件: 对于存档中

我在自学编程。我需要一个特定功能的帮助。我希望在applescript中编写此代码,以便在Automator中使用此脚本。我也对shell或javascript解决方案持开放态度

输入

我有一系列的文件夹,在那里我重命名了所有的文件。以下是相关信息:

始终会有一个名为main.png的文件

始终会有一个名为tab.png的文件

有一组不同的图像,从01.png开始递增编号。例如:

01.png 02.png 03.png ... 30.png

我想构建一个脚本,根据以下规则归档文件: 对于存档中的文件:

它将始终包括main.png文件和tab.png文件

对于剩余的编号文件,脚本将对其进行计数。我正在寻找这些集合中可用的最多的文件:8、16、24或32

示例:

a。如果存在01.png…18.png,脚本将选择01.png…16.png并将其放入存档

b。如果01.png…15.png退出,脚本将选择01.png…8.png并将它们放入存档

c。如果存在01.png…50.png,脚本将选择01.png…32.png并将它们放入存档

最后,脚本将根据选择的编号文件数量命名归档文件。因此,如果只有8个编号的文件,它会将归档文件命名为8.zip。如果有32个编号的文件,它将把归档文件命名为32.zip。 这是为了帮助我在不打开zip的情况下计算出zip中有多少编号的文件


提前谢谢!我真的不知道该怎么做,但在Stackoverflow上找不到好的源代码

警告:此网站不是要求其他人开发您的程序,而是帮助您找到脚本的解决方案。正如你所说,你需要学习自己,这是最好的方法

然而,我们已经接近圣诞节了,所以,例外的是,下面的节目会满足你的需求。我添加了许多注释,以确保您理解它,并可以将其用于学习:

set MyFolders to choose folder with prompt "select folders to be processed" with multiple selections allowed

repeat with aFolder in MyFolders
tell application "Finder"
    set myFiles to every file of aFolder
    set NbFiles to count of myFiles
    set MaxArchive to 8 * ((NbFiles - 2) div 8) -- round down number of files (-2 for main and tab) to multiple of 8 (=8,16,24,32,..)
    if MaxArchive = 0 then
        display alert "not enough file to create archive"
        return
    end if
    set ArchiveName to MaxArchive & ".zip" -- set name of archive to xx.zip : xx=number of files
    set ArchivePath to quoted form of ((POSIX path of aFolder) & ArchiveName) -- convert path to folder to unix path
    set FilestoArchive to {}
    set Nb to 0
    repeat with I from 1 to NbFiles -- loop through all files
        if (((name of item I of myFiles) contains "main.png") or ((name of item I of myFiles) contains "tab.png")) then -- add main or tab files anyway
            copy (item I of myFiles) to the end of FilestoArchive -- the file must be included in archive
        else
            if Nb < MaxArchive then
                copy (item I of myFiles) to the end of FilestoArchive -- the file must be included in archive
                set Nb to Nb + 1 --  incrementes file counter
            end if
        end if
    end repeat

    -- Now archive all files in the list FilestoArchive into ZIP file named ArchiveName in folder ArchivePath
    repeat with F in FilestoArchive
        set FPath to quoted form of POSIX path of (F as string)
        do shell script "zip -r " & ArchivePath & " " & FPath -- shell instruction to zip
    end repeat
end tell

end repeat -- loop to next folder to be processed

要了解有关zip命令的更多信息,请进入Terminal并键入“man-zip”。有很多选择

我真的不知道该怎么做:那你应该先试着自学,这是最好的学习方式。谢谢。我一直在挣扎。我现在知道使用automator归档文件。这是我正在努力解决的特殊过滤问题。非常感谢!我现在正在深入研究这个问题。一定要在这学习。我的问题是我太新了,我甚至不知道如何用谷歌搜索一个查询。我非常感谢。我现在就要深入研究了。这真的很优雅。它实际上删掉了我的其他一些applescripts:加载文件夹并以增量方式分发它们,这是我必须搜索的附加操作。谢谢。嗨,我发现了一个我不知道如何修复的错误。我认为问题在于档案路径。现在,zip程序正在压缩指向子文件夹的所有文件夹,而不仅仅是请求的文件。因此,它将层次结构中的所有hte文件夹(包括桌面文件夹)压缩为空,直到达到实际的文件数。有没有办法解析出所有这些更高级别的文件夹?脚本的第4行将项目列表限制为所选文件夹的“每个文件”,然后它应该排除任何子文件夹。仅供参考,“每个项目”将包括文件和文件夹。所以我看不出zip文件中包含子文件夹的任何原因。您可以通过使用命令“log”查看列表“myFiles”来检查这一点。它不包括我的sub。关于ArchivePath,它只获取所选文件夹的路径,以便将zip结果也保存在该文件夹中。如果要将此zip保存在该文件夹的容器中,请使用“容器”查找器属性。