applescript、文件夹操作、移动复制的项目失败、计时问题?

applescript、文件夹操作、移动复制的项目失败、计时问题?,applescript,move,timing,finder,Applescript,Move,Timing,Finder,请帮忙,我想不出解决办法 文件夹操作旨在为复制到文件夹中的每个文件执行此操作: 派生子文件夹名称和新文件名 创建子文件夹 将文件移动到其中 重命名子文件夹和文件 文件从不同的卷复制,通常为500…1500 MB 问题:如果文件太大且数量为>1 它们是从不同的卷复制的 复制时,脚本工作正常:小文件,或来自同一卷,或仅一个文件 在一次测试中,所有200个别名都得到了正确处理,但512个别名中只有23个得到了正确处理。这不是问题,添加的项目数通常为50。但这可能有助于解决这一问题 我怀疑是时间问题,但

请帮忙,我想不出解决办法

文件夹操作旨在为复制到文件夹中的每个文件执行此操作:

  • 派生子文件夹名称和新文件名
  • 创建子文件夹
  • 将文件移动到其中
  • 重命名子文件夹和文件
  • 文件从不同的卷复制,通常为500…1500 MB

    问题:如果文件太大且数量为
    >1
    它们是从不同的卷复制的

    复制时,脚本工作正常:小文件,或来自同一卷,或仅一个文件

    在一次测试中,所有200个别名都得到了正确处理,但512个别名中只有23个得到了正确处理。这不是问题,添加的
    项目数通常为
    50
    。但这可能有助于解决这一问题

    我怀疑是时间问题,但所有使用大量的
    超时来修复它的尝试都没有成功

    脚本(注意-在尝试之前,请将
    do shell脚本
    行中的正则表达式设置为可行的):

    在收到添加的\u项目后将文件夹项目添加到此\u文件夹
    对添加的\u项中的\u项重复此操作
    超时3600秒
    告诉应用程序“查找器”
    若项目的种类不是“文件夹”,那个么
    重复--等待项目被复制。感谢WWW.com上的原创编码器。
    将{size:fileSize,busy status:busy}设置为(_项的信息))
    如果不忙且(文件大小大于0),则退出“重复”
    延迟1
    结束重复
    超时600秒
    将新文件夹名称设置为执行shell脚本“echo”&(项目名称)
    &“'sed-E's/llooongRegex/replace/g'”
    将new_item_name设置为执行shell脚本“echo”&(_item的名称)
    &“'sed-E's/otherRegex/replace/g'”
    将new_folder设置为(在此_folder中创建属性为{name:(new_folder_name&“-temp”)}的新文件夹,作为别名--“-temp”,以防新文件夹和文件具有相同的名称
    将文件项目移动到文件夹新文件夹--1)和(文件大,用0.5…1.5GB测试)和(从不同卷复制))==>时间问题?
    将(获取新\u文件夹内容的第一项)的名称设置为新\u项\u名称
    将新文件夹的名称设置为新文件夹的名称
    结束超时
    如果结束
    结束语
    结束超时
    结束重复
    结束将文件夹项目添加到
    

    注意:
    文件夹操作是否足够频繁,以便标记?

    替换
    重复-等待项目被复制…
    子句,使用一个简单的
    延迟60
    ,脚本工作。因此,这是一个时间问题

    只要只有一个文件复制(一堆文件被删除)正在运行,等待目标文件夹停止按描述更改大小就可以工作。两次或更多的阻力下降,它又打嗝了(好话,@vadian!)


    检查单个添加项目的大小是否保持不变时也是如此。

    请注意,热文件夹的任何变化(添加项目、创建文件夹、重命名文件夹)都会再次触发文件夹操作,这可能会导致一些小问题。是的,触发操作的数量可能是一个问题。但对于小文件,至少可以处理200个项目。
    on adding folder items to this_folder after receiving added_items
        repeat with the_item in added_items
            with timeout of 3600 seconds
    
                tell application "Finder"
                    if kind of the_item is not "Folder" then
    
                        repeat -- wait until item is copied. Thanks to original coder on the WWW.
                            set {size:fileSize, busy status:Busy} to (info for (the_item))
                            if not Busy and (fileSize is greater than 0) then exit repeat
                            delay 1
                        end repeat
    
                        with timeout of 600 seconds
                            set new_folder_name to do shell script "echo '" & (name of the_item) ¬
                                & "' | sed -E 's/llooongRegex/replace/g'"
                            set new_item_name to do shell script "echo '" & (name of the_item) ¬
                                & "' | sed -E 's/otherRegex/replace/g'"
    
                            set new_folder to (make new folder at this_folder with properties {name:(new_folder_name & "-temp")}) as alias -- "-temp" in case new folder and file will have the same name
    
                            move file the_item to folder new_folder -- <== fails if ((added_items >1) AND (files big, tested with 0.5…1.5GB) AND (copied from different volume))   ==> Timing issue? 
    
                            set name of (first item of (get contents of new_folder)) to new_item_name
    
                            set name of new_folder to new_folder_name
    
                        end timeout
    
                    end if
                end tell
    
            end timeout
        end repeat
    end adding folder items to