不清楚你的实际文件/情况,仅以问题中的样例/说明为据
复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行/*&cls
@echo off
cd /d "%~dp0"
rem 截取文件名称开头的部分字符串,并将该字符串中的罗马数字转换成阿拉伯数字后作为新的文件名来重命名文件
for /f "tokens=1* delims=|" %%a in ('dir /a-d/b *_*.xls^|cscript -nologo -e:jscript "%~f0"') do (
echo;"%%b" --^> "%%a%%~xb"
ren "%%b" "%%a%%~xb"
)
pause&exit
*/
var fso=new ActiveXObject('Scripting.FileSystemObject');
var list1=['Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ','Ⅷ','Ⅸ','Ⅹ','ⅰ','ⅱ','ⅲ','ⅳ','ⅴ','ⅵ','ⅶ','ⅷ','ⅸ','ⅹ'];
var list2=['I','II','III','IV','V','VI','VII','VIII','IX','X','i','ii','iii','iv','v','vi','vii','viii','ix','x'];
while(!WSH.StdIn.AtEndOfStream){
var line=WSH.StdIn.ReadLine();
var f=fso.GetFile(line);
var oldname=f.Name;
for(var i=0;i<list1.length;i++){
oldname=oldname.replace(list1[i],list2[i]);
}
var m=oldname.match(/^([^_]+)_([IVXLC]+)/i);
if(m){
var basename=m[1]+addZero(toInt(m[2]));
WSH.echo(basename+'|'+line);
}
}
function addZero(s){return s>10?''+s:'0'+s;}
function toInt(s){
var a={'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
var b=0;
for(var i=0;i<s.length;i++){
if(i>0 && a[s.charAt(i).toUpperCase()]>a[s.charAt(i-1).toUpperCase()]){
b+=a[s.charAt(i).toUpperCase()]-2*a[s.charAt(i-1).toUpperCase()];
}else{
b+=a[s.charAt(i).toUpperCase()];
}
}
return b;
}
温馨提示:答案为网友推荐,仅供参考