怎么用bat批量去掉文件名最后的“_”和“数字”?

我每天要处理很多文件,都在子文件夹里,都是这种形式:
美好的春天_01.jpg
残酷的冬天_02.jpg
炎热的夏天_03.jpg
清爽的秋天_04.jpg

我需要把名字修改成:
美好的春天.jpg
残酷的冬天.jpg
炎热的夏天.jpg
清爽的秋天.jpg

请问大神,怎么样通过bat代码来实现呢?让本文件夹,以及下面各级的子文件夹里内容,都批量修改好。

1、在待修改的jpg所在的文件夹内新建一个TXT文本

2、打开这个txt文本,输入下面的文字

@echo off

::Deep Lee

setlocal enabledelayedexpansion

for %%f in (*.jpg) do (

echo %%f

set name=%%f

ren !name! !name:~0,-7%!.jpg

)

Pause


 

注意:7是怎么来的,比如你要删除的内容_01共有3位,删除的时候会把后面的内容(即_02.jpg)全部删掉,所以加起来要删除的是7位。

3、保存,将文本文档的后缀名“.txt”改成“.bat”

4、双击bat文件,按任意键一下,完成。

5、注意:此文件夹内的所有jpg文件都会删除后面3位!如果不是jpg格式换成其他,则需要多修改两处格式“.jpg”,“.mp3”,“.pptx”,“.docx”等等,注意总的位数也要变!此方法是按照删除同样位数的字符数实现的!

6、此方法只适用于本文件夹,子文件夹不能联动。笨办法可以将此bat文件复制进子文件夹,运行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-29
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行
/*&cls
@echo off
rem 去掉/删除文件名末尾的特定数字序号后缀字符串
mode con lines=3000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
dir /a-d/b/s *.jpg|cscript -nologo -e:jscript "%~f0"
echo;%#% +%$%%$%/%@% %z%
pause
exit
*/
var fso=new ActiveXObject('Scripting.FileSystemObject');
while(!WSH.StdIn.AtEndOfStream){
var line=WSH.StdIn.ReadLine();
var f=fso.GetFile(line)
var ext=fso.GetExtensionName(f.Path);
var oldbase=fso.GetBaseName(f.Path);
var newbase=oldbase.replace(/_\d+$/,'');
if(oldbase != newbase){WSH.echo(line+' --> '+newbase+(ext==''?'':'.'+ext));}
}追问

大神,代码已经能正确识别出文件了,但是按过回车以后,文件名并没有把最后的_01给去掉,是我还要再做什么参数设置吗?

追答

按运行后窗口标题栏中的提示联系我

本回答被网友采纳
相似回答