Bat批处理:批量重命名包含指定名称文件夹里的指定文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bat批处理:批量重命名包含指定名称文件夹里的指定文件相关的知识,希望对你有一定的参考价值。

1.批处理范围:脚本所在目录里所有的子文件夹(有的是二层结构,有的三层结构或四层)
2.指定名称文件夹为:只要文件夹名称里包含(正或Z)这两个任何一个都进行文件重命名
3.指定文件为:文件夹里的最后一个文件(重命名为TYT-1)
4.图片格式为:jpg 及 tif
求具体代码

1. 单一的重命名,代码如下:
@echo off
rename D:\\111\\111.txt 222.txt
pause

2. 批量的重命名,请根据你的命名规则使用for循环即可。代码如下:
@echo off
cd /d D:\\
if exist 111.txt (
if not exist D:\\111\\ md 111
copy 111.txt 111\\222.txt
del 111.txt
rename 111\\333.txt 444.txt
)
pause

3. 知道文件名如111.txt,但不明确它的路径,搜索文件如下:
@echo off
for %%i in (c d e f g h) do (
cd /d %%i:\\
echo 搜索%%i盘...
dir /s /b 111.txt
)
pause

4. 知道文件名比如(*\\111\\222.txt)盘符不知道,自动搜索并修改为333.txt
@echo off
for %%i in (c d e f g h) do (
cd /d %%i:\\
echo 搜索%%i盘...
rem 搜索111文件夹
for /f %%j in (\'dir /s /b /a:d *111\') do (
if "%%~nj"=="111" (
if exist %%j\\222.txt (
echo rename %%j\\222.txt 333.txt
rename %%j\\222.txt 333.txt
)
)
)
)
pause
参考技术A 难点在第3点,必须知道文件名的命名规则,因BAT对文件的排序和WIN往往不一样。
BAT中13.txt排在2.txt前面,是按文件名逐字比较。而WIN中按数字大小比较。追问

图片的文件名格式都是三位数 001 002 003

追答

还有一点:如果像aaZ这样文件夹下,里面还有aa1文件夹,那么aaZ中最后一个文件,是仅指aaZ当前文件夹中最后一个,还是也要把aa1中的文件都要算进来?

追问

aaZ当前文件夹中最后一个即可

追答

一定要备份源文件

@echo off
for /f "delims=" %%a in ('dir /ad/s/b') do (
set "str=%%~nxa"
setlocal enabledelayedexpansion
if not "!str:Z=!"=="!str!" set flag=1
if not "!str:正=!"=="!str!" set flag=1
if defined flag (
for /f "delims=" %%b in ('dir /a-d/b "%%a"') do set "file=%%a\\%%b"&set "ex=%%~xb"
ren "!file!" "TYT-1!ex!"
)
endlocal
)
pause

追问

能不能再加上一个条件,只修改jpg或tif图像文件

追答

可以。那最后一个文件就是指最后一个jpg或tif,而不是所有文件的最后一个,对吧?

追问

追答@echo off
for /r /d %%a in (*) do (
    set "str=%%~nxa"
    setlocal enabledelayedexpansion
    if not "!str:Z=!"=="!str!" set flag=1
    if not "!str:正=!"=="!str!" set flag=1
    if defined flag for /f "delims=" %%b in ('dir /a-d/b "%%a"^|findstr /i /r /e ".jpg .tif"') do set "file=%%a\\%%b"&set "ex=%%~xb"
    if defined ex ren "!file!" "TYT-1!ex!"
    endlocal   
)

本回答被提问者采纳

DOS按规则批量重命名所有(子)目录下文件

一个路径下面有很多个很多级的子目录,里面都包含 R(??)*.jpg还有R(??)*.tif若干个,希望改名的时候整个路径下的所有子目录里的同编码的文件全部一起改了。

比如 R(20)百度知道开放平台.jpg 和 R(20)手机知道个人中心经验.tif 等等这些文件名都改成 R(20)咨询专家 改名后后缀名不变。

好像是要用echo吧。请问怎么写?
恩,希望用dos或批处理bat文件实现都行

一种方法就是做个批处理程序,内容就是无数个rename命令行
这么多命令行一个个敲不是累坏了,用excel处理。
第一步,命令行进入文件所在目录,输入命令:dir/b > c:\filename,在C盘就有一个保存目录下所有文件名的文本文件了。
第二步,用excel打开这个文件(打开对话框的文件类型要选择所有文件),所有的文件名就出现在excel的第一列了。
第三步,excel编辑这个文件做成批处理需要的格式,文件名前面插入一列,全部填上rename,第二列是原始文件名了,第三列是要修改成的文件名,按照你的需求来做吧,复制、查找替换什么的。
第四步,保存文件,保存对话框选择所有文件类型,文件名写成filename.bat。主要是扩展名写成bat,前面的名字随便了。
第五步,filename. bat拷贝到要处理的那个目录下,命令行进入这个目录,执行filename.bat。
完成。
其他需求,自己可以想想看。
参考技术A FOR /f "delims= tokens=1*" %a IN ('dir /a-d/b/s *.jpg') DO (
copy %a e:\01
)
FOR /f "delims= tokens=1*" %a IN ('dir /a-d/b/s *.tif') DO (
copy %a e:\02
)
参考技术B 下载个 应用软件不就好了吗?比如 filerename 批量改名专家

以上是关于Bat批处理:批量重命名包含指定名称文件夹里的指定文件的主要内容,如果未能解决你的问题,请参考以下文章

bat批量重命名文件

bat批量重命名文件(在子文件夹里)

bat批处理文件夹下所有子文件夹下最后一个的文件重命名?

如何使用bat批量按文件夹名称筛选文件夹并复制到指定地方?

批处理:批量重命名父文件夹下所有子文件夹里的文件

如何批量重命名文件夹下的Excel文件