标题: [文件操作] BAT怎样把文件夹和文件夹下的文件都更改格式重命名[略有难度有断序]? [打印本页]
作者: playinthesky 时间: 2013-12-13 01:19 标题: 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文件- @echo off
- for /r %%i in (*.jpeg) do (
- echo %%i>>whole.txt
- move %%i %~dp0)
- pause
复制代码
然后重命名,重命名好之后,在用重命名文件夹的软件,批量建立我所需要格式的文件夹,然后我再- @echo off
- for %%i in (*.jpeg) do (
- for /f "tokens=*" %%a in (whole.txt) do (
- echo %%a | findstr "%%i" && move %%i %%a))
- 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处理之后
期待解决
作者: xxpinqz 时间: 2013-12-13 07:56
- @echo off&setlocal enabledelayedexpansion
- set "dn=10000"
- for /d %%a in (2012-永久-*) do (
- pushd "%%a"
- set/a dn+=1,fn=10000
- for %%b in (2012-永久-*.jpeg) do (
- set/a fn+=1
- ren "%%b" "J027-2012-永久-!dn:~-4!-!fn:~-4!.jpeg"
- )
- popd
- ren "%%a" "J027-2012-永久-!dn:~-4!"
- )
复制代码
自己复制几个文件夹测试一下。
作者: playinthesky 时间: 2013-12-13 12:37
回复 2# xxpinqz
好的,我试试看,谢谢高手帮助。
作者: playinthesky 时间: 2013-12-13 12:41
回复 2# xxpinqz
可行,大赞,你真厉害!
作者: playinthesky 时间: 2013-12-15 16:32
回复 2# xxpinqz
很不好意思,我又来了,我之前忘记考虑了一个情况,就是文件夹和文件夹下的文件均有断续的。这样能否解决?????
作者: xxpinqz 时间: 2013-12-15 21:45
回复 5# playinthesky
只适合你上面举例的文件及目录名:- @echo off&setlocal enabledelayedexpansion
- for /d %%a in (2012-永久-*) do (
- pushd "%%a"
- for /f "tokens=3 delims=-_" %%i in ("%%a") do set "dn=0000%%i"
- for %%b in (2012-永久-*.jpeg) do (
- for /f "tokens=3 delims=e_" %%i in ("%%b") do set "fn=0000%%i"
- ren "%%b" "J027-2012-永久-!dn:~-4!-!fn:~-4!.jpeg"
- )
- popd
- ren "%%a" "J027-2012-永久-!dn:~-4!"
- )
复制代码
上面的写法,改名的文件名前缀部分与目录名相同。
自己测试一下。
有问题举一两个表述清晰的例子即可,不用发那么多图.
作者: benton 时间: 2013-12-15 23:13
本帖最后由 benton 于 2013-12-15 23:38 编辑
生成测试环境:- @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
- set ccd=%cd%
-
- for /l %%a in (1,1,20) do (
- set /a n-=1
- set cn=0000%%a
- if !n! lss 5 (
- set /a n=!random:~-1!
- md %ccd%\2012-永久-!cn:~-3!_image
- cd /d %ccd%\2012-永久-!cn:~-3!_image
- for %%d in (%%a !random! !random!) do (
- set cm=0000%%d
- for /l %%b in (1,1,20) do (
- set /a m-=1
- if !m! lss 5 (
- set /a m=!random:~-1!
- if "00!random:~-1!" neq "00%%b" echo;>2012-永久-!cm:~-3!_page%%b_0.jpeg
- )
- )
- )
-
-
- )
-
- )
-
- cd /d %ccd%
复制代码
处理代码:- @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
- set ccd=%cd%
-
- for /d %%a in (2012-永久*) do (
- for /f "delims=-_ tokens=1-4" %%1 in ("%%a") do (
- set sn=00%%3
- set strd=j027-%%1-%%2-!sn:~-4!
- pushd %%a
-
- echo;正在处理目录 "%%a" 到 "!strd!" ……
- for /f %%b in ('dir /b *.jpeg') do (
- set str=%%b
- for /f "delims=-_ tokens=1-4" %%1 in ("!str:page=!") do (
- set stre=000%%3
- set strf=000%%4
- ren "%%b" "j027-%%1-%%2-!stre:~-4!-!strf:~-4!.jpeg"
- )
- )
-
- popd
- move "%%a" "!strd!"
- )
-
- )
- echo;完成
- pause
复制代码
作者: PowerShell 时间: 2013-12-17 10:02
楼主所说的[断续],和配图,我看了半天也没搞懂,不知道楼主想咋搞啊?
目录名咋搞? 文件名咋搞?
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] ,等等这样?
作者: playinthesky 时间: 2013-12-18 12:57
回复 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年。
作者: terse 时间: 2013-12-19 00:46
看楼主还在纠结 7楼道不能满足吗
作者: wangxiaodong 时间: 2014-4-5 12:29
楼主,现在解决了吗
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |