我创建了一个处理器。当PutFile失败时(由于文件已存在),我想将文件从myfile.JPG重命名为myfile_1.JPG重命名为myfile_2.JPG,依此类推,直到PutFile成功。在进行此处理之前,“ myfile”在文件名中的任何地方都不应带有下划线。
我的流程如下: PutFile-> UpdateAttribute-> PutFile(循环)
${filename:contains('_'):ifElse(
${filename:substringBeforeLast('_'):append('_'):append(${filename:substringAfterLast('_'):substringBefore('.'):plus(1)}):append('.'):append(${filename:substringAfter('.')})},
${filename:substringBefore('.'):append('_1.'):append(${filename:substringAfter('.')})}
)}
示例输入文件名:2017-06-15-175053.JPG
示例输出文件名:2017-06-15-175053_1.JPG
示例输入文件名:2017-06-15-175053_1.JPG
示例输出文件名:2017-06-15-175053_2.JPG
首先,我检查文件名中是否存在“ _”(预计输入的文件名将在我的“增量名称”处理器运行之前不包含它)
如果确实存在“ _”,请抓住“ _”和“。”之间的数字,并将其递增 如果“ _”不存在,请在末尾附加“ _.JPG”。
预期结果:文件名立即增加,直到PutFile成功。
实际结果:几分钟后,执行了数百万个任务,文件最终被重命名为“ myfile_6.JPG”,我不确定为什么要进行如此多次的迭代。
答案 0 :(得分:3)
PutFile
对失败的流文件进行惩罚。
默认情况下为Penalty duration = 30sec
。这意味着,下一个处理器(UpdateAttribute)将在30秒内不处理该文件。
您可以将此时间设置为0sec
,以避免在Settings
处理器的Configuration
中的PutFile
选项卡上出现此延迟。因此,下一个处理器将不等待处理失败的文件。