找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32665|回复: 10

[文件操作] BAT怎样把文件夹和文件夹下的文件都更改格式重命名[略有难度有断序]?

[复制链接]
发表于 2013-12-13 01:19:17 | 显示全部楼层 |阅读模式
本帖最后由 playinthesky 于 2013-12-15 18:48 编辑

原始:

文件夹格式

2012-永久-001_image
2012-永久-002_image
2012-永久-003_image
2012-永久-004_image
2012-永久-005_image
2012-永久-006_image
2012-永久-007_image

文件夹 2012-永久-001_image  下
2012-永久-001_page1_0.jpeg
2012-永久-001_page2_0.jpeg
2012-永久-001_page3_0.jpeg
2012-永久-001_page4_0.jpeg
2012-永久-001_page5_0.jpeg

文件夹 2012-永久-002_image  下
2012-永久-002_page1_0.jpeg
2012-永久-002_page2_0.jpeg
2012-永久-002_page3_0.jpeg
2012-永久-002_page4_0.jpeg

....

以及类推,有成千上万个

目标格式:

文件夹格式

J027-2012-永久-0001
J027-2012-永久-0002
J027-2012-永久-0003
J027-2012-永久-0004
J027-2012-永久-0005
J027-2012-永久-0006
J027-2012-永久-0007

文件夹 J027-2012-永久-0001  下

J027-2012-永久-0001-0001.jpeg
J027-2012-永久-0001-0002.jpeg
J027-2012-永久-0001-0003.jpeg
J027-2012-永久-0001-0004.jpeg
J027-2012-永久-0001-0005.jpeg

文件夹 J027-2012-永久-0002  下

J027-2012-永久-0002-0001.jpeg
J027-2012-永久-0002-0002.jpeg
J027-2012-永久-0002-0003.jpeg
J027-2012-永久-0002-0004.jpeg
J027-2012-永久-0002-0005.jpeg

我的思路:想将所有文件夹下的JEPG文件

  1. @echo off
  2. for /r %%i in (*.jpeg) do (
  3. echo %%i>>whole.txt
  4. move %%i %~dp0)
  5. pause
复制代码
然后重命名,重命名好之后,在用重命名文件夹的软件,批量建立我所需要格式的文件夹,然后我再

  1. @echo off
  2. for %%i in (*.jpeg) do (
  3. for /f "tokens=*" %%a in (whole.txt) do (
  4. echo %%a | findstr "%%i" && move %%i %%a))  
  5. pasue
复制代码
但是我发现效率很低下,移动的过程中,非常的慢。

能不能有高手,可以直接批处理的时候,将我上面所说的两步合成一步处理了,另外就是原始文件中文件的序列都是3位数的,但是要求均为四位且在年份之前需要加上 J027- 的标注,去除文件夹名后 _image的标注

后面各个文件夹下的文件名,也需要将_page和_0过滤,文件的名字,要把-002 从三位提升到四位变成0002,也同样要加上 J027- 的标注。所以感觉很难。

很不好意思,我又来了,我之前忘记考虑了一个情况,就是文件夹和文件夹下的文件均有断续的。这样能否解决?????

文件夹格式

2012-永久-001_image
2012-永久-002_image
2012-永久-009_image
2012-永久-010_image
2012-永久-015_image
2012-永久-017_image
2012-永久-250_image

文件夹 2012-永久-001_image  下
2012-永久-001_page1_0.jpeg
2012-永久-001_page2_0.jpeg
2012-永久-001_page7_0.jpeg
2012-永久-001_page9_0.jpeg
2012-永久-001_page10_0.jpeg

文件夹 2012-永久-002_image  下
2012-永久-002_page1_0.jpeg
2012-永久-002_page2_0.jpeg
2012-永久-002_page3_0.jpeg
2012-永久-002_page12_0.jpeg

文件夹 2012-永久-009_image  下
2012-永久-009_page1_0.jpeg
2012-永久-009_page2_0.jpeg
2012-永久-009_page6_0.jpeg
2012-永久-009_page9_0.jpeg

文件夹 2012-永久-010_image  下
2012-永久-010_page1_0.jpeg
2012-永久-010_page2_0.jpeg
2012-永久-010_page3_0.jpeg
2012-永久-010_page27_0.jpeg

文件夹 2012-永久-015_image  下
2012-永久-010_page1_0.jpeg
2012-永久-010_page12_0.jpeg
2012-永久-010_page17_0.jpeg
2012-永久-010_page29_0.jpeg

文件夹 2012-永久-017_image  下
2012-永久-002_page1_0.jpeg
2012-永久-002_page18_0.jpeg
2012-永久-002_page28_0.jpeg
2012-永久-002_page61_0.jpeg

文件夹 2012-永久-250_image  下
2012-永久-002_page1_0.jpeg
2012-永久-002_page2_0.jpeg
2012-永久-002_page99_0.jpeg
2012-永久-002_page170_0.jpeg

.......

以及类推,有成千上万个

因为有断续,所以如果用计数器补零的办法,就会照成原先的序列混乱,能否保证原先的排序情况,进行补零,先谢过各位高手了!





执行好心人的BAT处理之后



期待解决

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-12-13 07:56:51 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. set "dn=10000"
  3. for /d %%a in (2012-永久-*) do (
  4.     pushd "%%a"
  5.     set/a dn+=1,fn=10000
  6.     for %%b in (2012-永久-*.jpeg) do (
  7.         set/a fn+=1
  8.         ren "%%b" "J027-2012-永久-!dn:~-4!-!fn:~-4!.jpeg"
  9.     )
  10.     popd
  11.     ren "%%a" "J027-2012-永久-!dn:~-4!"   
  12. )
复制代码
自己复制几个文件夹测试一下。

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-12-13 12:37:22 | 显示全部楼层
回复 2# xxpinqz


    好的,我试试看,谢谢高手帮助。
 楼主| 发表于 2013-12-13 12:41:16 | 显示全部楼层
回复 2# xxpinqz


    可行,大赞,你真厉害!
 楼主| 发表于 2013-12-15 16:32:41 | 显示全部楼层
回复 2# xxpinqz


    很不好意思,我又来了,我之前忘记考虑了一个情况,就是文件夹和文件夹下的文件均有断续的。这样能否解决?????
发表于 2013-12-15 21:45:19 | 显示全部楼层
回复 5# playinthesky
只适合你上面举例的文件及目录名:

  1. @echo off&setlocal enabledelayedexpansion
  2. for /d %%a in (2012-永久-*) do (
  3.     pushd "%%a"
  4.     for /f "tokens=3 delims=-_" %%i in ("%%a") do set "dn=0000%%i"
  5.     for %%b in (2012-永久-*.jpeg) do (
  6.         for /f "tokens=3 delims=e_" %%i in ("%%b") do set "fn=0000%%i"
  7.         ren "%%b" "J027-2012-永久-!dn:~-4!-!fn:~-4!.jpeg"
  8.     )
  9.     popd
  10.     ren "%%a" "J027-2012-永久-!dn:~-4!"   
  11. )
复制代码
上面的写法,改名的文件名前缀部分与目录名相同。
自己测试一下。
有问题举一两个表述清晰的例子即可,不用发那么多图.
发表于 2013-12-15 23:13:03 | 显示全部楼层
本帖最后由 benton 于 2013-12-15 23:38 编辑

生成测试环境:
  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set ccd=%cd%

  3. for /l %%a in (1,1,20) do (
  4.     set /a n-=1
  5.     set cn=0000%%a
  6.     if !n! lss 5 (
  7.             set /a n=!random:~-1!
  8.             md %ccd%\2012-永久-!cn:~-3!_image
  9.             cd /d %ccd%\2012-永久-!cn:~-3!_image
  10.        for %%d in (%%a !random! !random!) do (
  11.          set cm=0000%%d
  12.          for /l %%b in (1,1,20) do (
  13.             set /a m-=1
  14.             if !m! lss 5 (
  15.                      set /a m=!random:~-1!
  16.                 if "00!random:~-1!" neq "00%%b" echo;>2012-永久-!cm:~-3!_page%%b_0.jpeg
  17.             )
  18.          )
  19.        )


  20.     )

  21. )

  22. cd /d %ccd%
复制代码
处理代码:
  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set ccd=%cd%

  3. for /d %%a in (2012-永久*) do (
  4.         for /f "delims=-_ tokens=1-4" %%1 in ("%%a") do (
  5.             set sn=00%%3
  6.             set strd=j027-%%1-%%2-!sn:~-4!
  7.             pushd %%a

  8.             echo;正在处理目录 "%%a" 到 "!strd!" ……
  9.             for /f %%b in ('dir /b *.jpeg') do (
  10.                 set str=%%b
  11.                 for /f "delims=-_ tokens=1-4" %%1 in ("!str:page=!") do (
  12.                         set stre=000%%3
  13.                         set strf=000%%4
  14.                         ren "%%b" "j027-%%1-%%2-!stre:~-4!-!strf:~-4!.jpeg"
  15.                 )
  16.             )

  17.             popd
  18.             move "%%a" "!strd!"
  19.         )

  20. )
  21. echo;完成
  22. pause
复制代码
发表于 2013-12-17 10:02:28 | 显示全部楼层
楼主所说的[断续],和配图,我看了半天也没搞懂,不知道楼主想咋搞啊?

目录名咋搞? 文件名咋搞?
2012-永久-001_image    ----> J027-2012-永久-0001
2012-永久-002_image    ----> J027-2012-永久-0001
2012-永久-009_image    ----> J027-2012-永久-0009  么?
2012-永久-010_image
2012-永久-015_image
2012-永久-017_image
2012-永久-250_image


每个目录中的目的文件名,我看和源文件名无关,[只是改名后的目录名]+ [-0001]  ,    [-0002] ,等等这样?
 楼主| 发表于 2013-12-18 12:57:28 | 显示全部楼层
回复 8# PowerShell


2012-永久-001_image    ----> J027-2012-永久-0001
2012-永久-002_image    ----> J027-2012-永久-0002
2012-永久-009_image    ----> J027-2012-永久-0009  
2012-永久-010_image   
2012-永久-015_image
2012-永久-017_image
2012-永久-250_image

把2012前面加上 J027,将_image去除,但是有2001年到2012年。
发表于 2013-12-19 00:46:52 | 显示全部楼层
看楼主还在纠结  7楼道不能满足吗
发表于 2014-4-5 12:29:50 | 显示全部楼层
楼主,现在解决了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:50 , Processed in 0.012570 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表