Board logo

标题: [文件操作] BAT怎样批量重命名所有子目录下部分名字相同的文件? [打印本页]

作者: wozhenfanzzz    时间: 2015-6-9 17:22     标题: BAT怎样批量重命名所有子目录下部分名字相同的文件?

本帖最后由 wozhenfanzzz 于 2015-6-10 21:11 编辑

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

比如所有的R(20)*.jpg 和 R(20)*.tif  等等这些文件名都改成 R(20)ABC   改名后后缀名不变。

*和?是通配符,这个路径假设是E:\test

好像是要用echo吧。请问怎么写?
作者: 尘丶    时间: 2015-6-9 19:03

@echo off&setlocal enabledelayedexpansion
set i=1
for %%a in (*.jpg) do (
ren "%%a" R^(20^)!i!.jpg
set /a i=!i!+1
)
set num=2
for %%a in (*.tif) do (
ren "%%a" R^(20^)!num!.tif
set /a num=!num!+1
)
pause
作者: wozhenfanzzz    时间: 2015-6-9 23:58

回复 2# 尘丶


    大侠测试过吗?   假设如果把e:\test路径下的所有子目录的文件  R999(20)文件名 ,R999(20)文件名文件名……这样的都改成R999(20)统一文件名。怎么弄?
我刚刚测试了,好像没有任何反应啊。。。。
作者: 437153    时间: 2015-6-10 14:21

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "filen=R(20)"
  4. set "newname=%filen%ABC"
  5. for /f "delims=" %%a in ('dir /b /s "%filen%*.jpg" "%filen%*.tif"') do (
  6. ren %%a !newname!%%~xa
  7. )
复制代码
只是不知道如果你同一个文件夹下面有多个R(20)*.jpg时,你怎么处理?不能同名啊
作者: wozhenfanzzz    时间: 2015-6-10 16:02

回复 4# 437153

@echo off
setlocal enabledelayedexpansion
set "filen=R999(20)"
set "newname=%filen%咨询专家"
for /f "delims=" %%a in ('dir /b /s "%filen%*.txt" "%filen%*.tif"') do (
        ren %%a !newname!%%~xa
)
我这么测试怎么没有一点反应呢?请问大侠测试了吗?这样测试对吗?
作者: 437153    时间: 2015-6-10 16:11

本帖最后由 437153 于 2015-6-10 16:12 编辑

回复 5# wozhenfanzzz


    我这里测试是正常的。不知道是不是你路径的问题。在for前面加一句cd/d E:\test 试试
另外我自己用的是txt和tif测试的,所以,你把代码中的后缀改成你的jpg和tif
作者: wozhenfanzzz    时间: 2015-6-10 16:16

本帖最后由 wozhenfanzzz 于 2015-6-10 16:30 编辑

回复 6# 437153


    还是没有任何反应......我测试的子文件夹里都是类似这样胡乱取名的文件: R999(20)3日寄居然i金佛几点刷积分.txt
运行完批处理文件之后一点反应也没有,我是改成txt了的。R999(20)是编码,每个子文件夹里没有编码相同的文件。

@echo off
setlocal enabledelayedexpansion
set "filen=R999(20)"
set "newname=%filen%咨询专家"
cd/d E:\test
for /f "delims=" %%a in ('dir /b /s "%filen%*.txt" "%filen%*.tif"') do (
        ren %%a !newname!%%~xa
)
作者: 尘丶    时间: 2015-6-10 18:54

我测试是正常的,能把你要修改的文件名的地方截图吗?让我看看有什么文件
作者: wozhenfanzzz    时间: 2015-6-10 19:26

回复 8# 尘丶
作者: 尘丶    时间: 2015-6-10 20:08

本帖最后由 尘丶 于 2015-6-10 20:11 编辑

回复 9# wozhenfanzzz


    setlocal enabledelayedexpansion
set i=1
for /f "delims=" %%a in ('dir /s /b *.jpg') do (
ren "%%~pnxa" R^(20^)!i!.jpg
set /a i=!i!+1
)
set num=2
for /f "delims=" %%a in ('dir /s /b *.tif') do (
ren "%%~pnxa" R^(20^)!num!.tif
set /a num=!num!+1
)
传不了图片,大概就是这样了,把当前jpg tif文件命名成R(20)1-n这样的名字。
pause
作者: wozhenfanzzz    时间: 2015-6-10 20:17

回复 10# 尘丶

把“R999(20)乱七八糟文件名”    这样的命名成 “R999(20)统一文件名” 不行吗?
作者: 尘丶    时间: 2015-6-10 20:28

回复 11# wozhenfanzzz


    不会重名么。
作者: bailong360    时间: 2015-6-10 20:34

  1. @ren2 -r -f "(R\(.*\)).*(\..*)" "$1ABC.$2"
复制代码
这样?
作者: wozhenfanzzz    时间: 2015-6-10 21:10

本帖最后由 wozhenfanzzz 于 2015-6-10 21:13 编辑

回复 12# 尘丶


    不会重名
作者: wozhenfanzzz    时间: 2015-6-10 21:12

回复 13# bailong360


    这么简单?就这一句?
作者: bailong360    时间: 2015-6-10 21:35

回复 15# wozhenfanzzz
第三方请自行下载




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2