[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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处理之后



期待解决
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 2# xxpinqz


    好的,我试试看,谢谢高手帮助。

TOP

回复 2# xxpinqz


    可行,大赞,你真厉害!

TOP

回复 2# xxpinqz


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

TOP

回复 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. )
复制代码
上面的写法,改名的文件名前缀部分与目录名相同。
自己测试一下。
有问题举一两个表述清晰的例子即可,不用发那么多图.
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 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
复制代码

TOP

楼主所说的[断续],和配图,我看了半天也没搞懂,不知道楼主想咋搞啊?

目录名咋搞? 文件名咋搞?
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] ,等等这样?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 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年。

TOP

看楼主还在纠结  7楼道不能满足吗

TOP

楼主,现在解决了吗

TOP

返回列表