<?xml version="1.0" encoding="UTF-8"?>
<rename_preset case="none" group="序号编号" ignoreext="yes" script="yes" type="normal" version="13">
	<from>*</from>
	<to>丨N丨*</to>
	<script>@script jscript
//TC的重命名序号支持分数
//如[C+1/2] 其中1/2就是步长，第1个文件序号是起始值 1
//第2个文件序号是1+0.5 不足2 结果=1
//第3个文件序号是1+1 足2 结果=2
//第4个文件序号是1+1.5 不足3 结果=2

//OnGetNewName函数是个循环体，对每个选中文件都执行
//在进入OnGetNewName循环体之前，先定义 开始值，位数值，步长值
var startN=1,padTo=1,stepN=1, multiple=0;
var placeholder = /丨N丨/g;//新名称中用&quot;丨N丨&quot;作为占位符

function OnGetNewName(getNewNameData)
{
	var digits = getNewNameData.custom.digits;
	if (digits == &quot;&quot; || !isPositiveInt(digits)) digits = padTo;//确保digits为正整数
	else {
		digits = parseInt(digits,10);
		if (digits&lt;1) digits = 1;
		if (digits&gt;120) digits = 120;
	}
	
	var step = getNewNameData.custom.step;
	if (step == &quot;&quot; || !isNumeric(step)) step = stepN;//确保step为数值
	var result = eval(multiple+&quot;*(&quot;+step+&quot;)&quot;);
	multiple++;
	result = result&lt;0 ? Math.ceil(result) : Math.floor(result);
	
	var start = getNewNameData.custom.startfrom;//获取自定义字段 起始值
	if (start == &quot;&quot; || !isInt(start)) start = startN;//确保start为整数
	
	var newname = parseInt(start) + result;//纯数字编号

	var prefix = &quot;&quot;;
	if (newname&lt;0) prefix = &quot;-&quot;;//负号
	newname = Math.abs(newname);//绝对值
	var prelen = newname.toString().length;
	if (prelen &lt; digits){
		//newname = Number(1).toFixed(digits-prelen).toString().slice(2) + newname;//不足位数则前面补0
		newname = Array(digits-prelen+1).join(&quot;0&quot;) + newname;
	}
	return getNewNameData.newname.replace(placeholder, prefix + String(newname));
}

function OnGetCustomFields(getFieldData)
{
    getFieldData.fields.startfrom = &quot;1&quot;;;
    getFieldData.field_labels(&apos;startfrom&apos;) = DOpus.strings.Get(&apos;startfrom&apos;);
	getFieldData.field_tips(&quot;startfrom&quot;) = DOpus.strings.Get(&apos;startTip&apos;);
    getFieldData.fields.step = &quot;1/2&quot;;
    getFieldData.field_labels(&apos;step&apos;) = DOpus.strings.Get(&apos;step&apos;);
	getFieldData.field_tips(&quot;step&quot;) = DOpus.strings.Get(&apos;stepTip&apos;);
	getFieldData.fields.digits = &quot;1&quot;;
    getFieldData.field_labels(&apos;digits&apos;) = DOpus.strings.Get(&apos;digits&apos;);
	getFieldData.field_tips(&quot;digits&quot;) = DOpus.strings.Get(&apos;digitsTip&apos;);
}

function isInt(str) {
	return !/[^\d\-]/.test(str);//正负整数
}

function isNumeric(str) {
	if (/[^\d\+\-\*\/]/.test(str)) return false;//数字加减乘除
	if (!/[\d]/.test(str)) return false;
	return true;
}

function isPositiveInt(str) {
	return !/[^\d]/.test(str);//正整数
}

==SCRIPT RESOURCES
&lt;resources&gt;
    &lt;resource type=&quot;strings&quot;&gt;
        &lt;strings lang=&quot;english&quot;&gt;
            &lt;string id=&quot;startfrom&quot; text=&quot;Number starts from&quot; /&gt;
			&lt;string id=&quot;startTip&quot; text=&quot;Supports negative integers&quot; /&gt;
			&lt;string id=&quot;step&quot; text=&quot;Step&quot; /&gt;
			&lt;string id=&quot;stepTip&quot; text=&quot;Supports fractions, decimals, and negative numbers&quot; /&gt;
			&lt;string id=&quot;digits&quot; text=&quot;Digits&quot; /&gt;
			&lt;string id=&quot;digitsTip&quot; text=&quot;Must be a positive integer&quot; /&gt;
        &lt;/strings&gt;
        &lt;strings lang=&quot;chs&quot;&gt;
            &lt;string id=&quot;startfrom&quot; text=&quot;数字编号起始于&quot; /&gt;
			&lt;string id=&quot;startTip&quot; text=&quot;支持负整数&quot; /&gt;
			&lt;string id=&quot;step&quot; text=&quot;步长&quot; /&gt;
			&lt;string id=&quot;stepTip&quot; text=&quot;步长支持分数、负数&quot; /&gt;
			&lt;string id=&quot;digits&quot; text=&quot;位数&quot; /&gt;
			&lt;string id=&quot;digitsTip&quot; text=&quot;必须为正整数，最多为120位&quot; /&gt;
        &lt;/strings&gt;
    &lt;/resource&gt;
&lt;/resources&gt;</script>
	<custom>
		<var name="digits" type="8">1</var>
		<var name="startfrom" type="8">1</var>
		<var name="step" type="8">1/2</var>
	</custom>
</rename_preset>
