![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 14:21 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 批量随机重命名与反重命名 |
| 可打印版本 3,580 / 54 |
| 第1楼 gundam72 | 发表于 2008-02-09 16:27 |
| 初级用户 发帖 19 积分 40 | |
|
批量随机重命名与反重命名 因为特殊需要,现在需要一个这样的批量处理:
我有一些jpg文件,名称格式是A001,A002这样的 我希望通过批处理给这些文件随机命名,随机命名的格式没有要求,只要尽量不重复,看不出规律就行 然后,我希望随机命名的批处理能够记录下原文件名和其对应的随机名,并能够再次批处理这些随机命名后的文件使它们恢复原来的文件名 不知道我说的够不够清楚...我也是因为这个需要在网上查了各种资料才知道有批处理这种技术可以解决,不过我对批处理一窍不通,看了置顶的教程也不是很懂。希望有好心人能够帮我实现这个功能需求。我自己也会慢慢学习批处理,感觉批处理很有用。所以,就算只是一点点想法或是建议心得之类的,只要是能够实现这个功能的,请大家务必回个帖教教我,我会整理学习的。先谢谢大家了~ 另外补充一点,这类文件有将近1000个需要重命名,所以随机数要大一点点,最好就是随机出一串字母的文件名,麻烦了~ [ Last edited by gundam72 on 2008-2-9 at 04:36 PM ] |
|
| 第2楼 pinghu | 发表于 2008-02-09 17:55 |
| 中级用户 发帖 130 积分 307 | |
|
你的这个问题我挺感兴趣的,用批处理可以解决,不过我需要时间!
耐心等待,我会给你满意的答案, |
|
| 第3楼 gundam72 | 发表于 2008-02-09 18:03 |
| 初级用户 发帖 19 积分 40 | |
|
非常感谢,我会耐心等的
|
|
| 第4楼 pinghu | 发表于 2008-02-09 22:15 |
| 中级用户 发帖 130 积分 307 | |
|
初步做了一个,里面有错误,有待大家完善 @echo on
setlocal enabledelayedexpansion :choice set /p aa=重命名X,恢复H: if %aa%==x goto :renam if %aa%==h (goto :resume)else goto :choice goto :eof :resume for /f "tokens=1,2 delims= " %%c in (重命名列表.txt) do (ren %%d %%c) pause goto :eof :renam del 重命名列表.txt for %%b in (*.bmp) do ( call :ranwd2 ren %%~nxb !filename!%%~xb echo %%~nxb !filename!%%~xb >>重命名列表.txt ) goto :eof :ranwd2 set word= for /l %%a in (1,1,8) do (call :ranwd1) set filename=%word% goto :eof :ranwd1 call :ranltr set word=%word%%letter% goto :eof :ranltr set /a num=%random%%%26 echo %num% if %num%==1 set letter=a if %num%==2 set letter=b if %num%==3 set letter=c if %num%==4 set letter=d if %num%==5 set letter=e if %num%==6 set letter=f if %num%==7 set letter=g if %num%==8 set letter=h if %num%==9 set letter=i if %num%==10 set letter=j if %num%==11 set letter=k if %num%==12 set letter=l if %num%==13 set letter=m if %num%==14 set letter=n if %num%==15 set letter=o if %num%==16 set letter=p if %num%==17 set letter=q if %num%==18 set letter=r if %num%==19 set letter=s if %num%==20 set letter=t if %num%==21 set letter=u if %num%==22 set letter=v if %num%==23 set letter=w if %num%==24 set letter=x if %num%==25 set letter=y if %num%==0 set letter=z goto :eof |
|
| 第5楼 pinghu | 发表于 2008-02-09 22:19 |
| 中级用户 发帖 130 积分 307 | |
|
关于重命名后没有检查文件夹里是否存在同名文件,本人正在修正,请不要轻易使用,会导致原文件名的丢失!
|
|
| 第6楼 slore | 发表于 2008-02-09 22:54 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
:ranltr
部分利用set帮助里可以看到可以取某字符串的某位数…… 定义一个变量abcde。。。xyz 然后 set /a num=%random%%%26 得到某位,取那位就可以了。。只要3行。。。 |
|
| 第7楼 pinghu | 发表于 2008-02-09 23:07 |
| 中级用户 发帖 130 积分 307 | |
|
感谢slore的帮助,我一定好好学习set
主要问题是,在我的机器上测试,发现有的文件被重命名两次,却不是重复的文件名引起的,不知何故? |
|
| 第8楼 slore | 发表于 2008-02-09 23:58 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
先echo看看。。。测试的时候
|
|
| 第9楼 slore | 发表于 2008-02-09 23:59 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
你不是有记录麽?你的重命名的文件不是要保留结果。
重命名列表.txt 里你看看那个文件被重命名2次了……原因自己一句一句分析 |
|
| 第10楼 gundam72 | 发表于 2008-02-10 00:18 |
| 初级用户 发帖 19 积分 40 | |
|
非常谢谢pinghu兄这么认真的帮我想办法,也感谢slore兄的帮助
不过我有点疑问,别介意 if %num%==1 set letter=a if %num%==2 set letter=b if %num%==3 set letter=c if %num%==4 set letter=d if %num%==5 set letter=e if %num%==6 set letter=f if %num%==7 set letter=g if %num%==8 set letter=h if %num%==9 set letter=i if %num%==10 set letter=j if %num%==11 set letter=k if %num%==12 set letter=l if %num%==13 set letter=m if %num%==14 set letter=n if %num%==15 set letter=o if %num%==16 set letter=p if %num%==17 set letter=q if %num%==18 set letter=r if %num%==19 set letter=s if %num%==20 set letter=t if %num%==21 set letter=u if %num%==22 set letter=v if %num%==23 set letter=w if %num%==24 set letter=x if %num%==25 set letter=y if %num%==0 set letter=z 这个的意思是不是将字母替换前面的数字?比如用z替换0这样? 可能是我表述的不清,我希望的是能无规则的随机命名,上面的替换法还是很容易能找出规律的。也可能是pinghu兄目前在测试记录命名对应情况,不过我还是先清楚的说出来,怕pinghu兄到时候辛苦帮我做出来结果却不是我想要的。 再次感谢pinghu兄~ |
|
| 第11楼 slore | 发表于 2008-02-10 01:40 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
这段是随机产生某个数
如果是1就是a字符…… 也就是想随机产生字母的意思。 |
|
| 第12楼 terse | 发表于 2008-02-10 02:23 |
| 银牌会员 发帖 946 积分 2,404 | |
|
@echo off
:choice set /p aa=重命名X 恢复H if %aa%==x goto renam if %aa%==h (goto resume) else goto :choice goto :eof :renam del 重命名jpg.bat 2>nul for /f "delims=" %%i in ('dir /b /a-d *.jpg') do ( call :loop "%%i" ) pause goto :eof :loop for /l %%i in (1,1,8) do (call :lp) >>重命名jpg.bat echo ren "%var%.jpg" %1 ren %1 "%var%.jpg" for %%i in (n var) do set %%i= goto :eof :lp set str=jklzxcbnmqvopasdfwertyuigh set/a s=%random%%%25 call set var=%var%%%str:~%s%,1%% goto :eof :resume 重命名jpg.bat |
|
| 第13楼 pinghu | 发表于 2008-02-10 11:14 |
| 中级用户 发帖 130 积分 307 | |
|
代码做了部分修正,如slore所说 @echo off
setlocal enabledelayedexpansion :choice set /p aa=重命名X,恢复H: if %aa%==x goto :renam if %aa%==h (goto :resume)else goto :choice goto :eof :resume for /f "tokens=1,2 delims= " %%c in (重命名列表.txt) do (ren %%d %%c) pause goto :eof :renam if exist 重命名列表.txt del 重命名列表.txt for %%b in (*.bmp) do ( call :ranwd2 ren %%~nxb !filename!%%~xb echo %%~nxb !filename!%%~xb >>重命名列表.txt ) goto :eof :ranwd2 set word= for /l %%a in (1,1,4) do (call :ranwd1) if not exist %word%.* (set filename=%word%) else call :ranwd2 goto :eof :ranwd1 call :ranltr set word=%word%%letter% goto :eof :ranltr set letter=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ set /a num=%random%%%52 call call set letter=!letter:~%num%,1! goto :eof |
|
| 第14楼 pinghu | 发表于 2008-02-10 11:27 |
| 中级用户 发帖 130 积分 307 | |
|
以上我脚本中的不足 如果一次不能恢复的话就多恢复几次,一定能成功!目前这个脚本不适于多次重命名,当第二次运行重命名的时候原始的文件名记录就没有了!!
脚本第十八行的bmp改成*的话,就能实现批处理当前目录下的所有文件重命名 另外这个批处理用起来还挺麻烦的,还得放在要命名的文件夹里,我下一部的目标是把他做成鼠标右键调用型的,还有能实现多次重命名,并一次成功还原的!! |
|
| 第15楼 pinghu | 发表于 2008-02-10 11:29 |
| 中级用户 发帖 130 积分 307 | |
|
还有,你楼主要的随机字母的位数可以自己定
|
|
| 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |