2016-11-12 72 views
-1

我在教自己编程。我需要特定功能的帮助。我正在编写这个applescript,所以我可以在Automator中使用这个脚本。我也开放给shell或javascript解决方案。Applescript归档一组文件

INPUT

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

  1. 总会有一个名为“main.png”的文件。

  2. 总会有一个名为“tab.png”的文件。

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

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

  • 我想建立一个脚本,该脚本档案按照以下规则的文件:
  • 对于归档文件:

    1. 它将始终包含“main.png”文件和“tab.png”文件。

    2. 对于其余编号的文件,脚本会对它们进行计数。我在寻找,在这些集可用文件的最大量:8,16,24或32

    例子:

    一个。如果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并将它们放入存档中。

    1. 最后,脚本会根据选择的编号文件数命名存档。所以如果只有8个编号的文件,它将命名存档“8.zip”。如果有32个带编号的文件,它将命名存档“32.zip”。

    这是为了帮助我弄清楚拉链中有多少个编号的文件,而不打开它。

    在此先感谢!我真的不知道这样做,但无法在Stackoverflow上找到好的源代码。

    +0

    _我真的不知道要做这个事情:那么你应该先尝试并教导自己,是最好的学习方式。 – Marcs

    +0

    Marcs - 谢谢。我一直在挣扎。我现在知道使用automator的档案文件。这是我正在努力的特定过滤。 – user7148404

    回答

    0

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

    但是,我们已经关闭到圣诞节,所以特别的是,程序波纹管做你想做的。我加入了很多的意见,以确保你了解它,你可以用它来学习:

    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命令,进入终端,输入“男人拉链”。有很多选择!

    +0

    非常感谢!我正在深入研究这一点。绝对是在这里学习。我的问题是,我很新,我甚至不知道如何谷歌查询。我很欣赏这一点。现在就去挖掘它。 – user7148404

    +0

    这真的很高雅。它实际上删除了一些其他我认为重要的applescript:加载文件夹并递增分配(这是我必须搜索的附加操作)。谢谢。 – user7148404

    +1

    嗨,我发现了一个错误,我无法弄清楚如何解决。我认为这个问题在ArchivePath中。现在,zip程序正在压缩所有导向子文件夹的文件夹 - 而不仅仅是请求的文件。因此,它将层次结构中的所有hte文件夹(包括桌面文件夹)都压缩为空,直到达到实际的数量计数文件。有没有办法解析出所有这些更高级别的文件夹? – user7148404