中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] »
作者:
标题: 批量随机重命名与反重命名 上一主题 | 下一主题
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 16 楼』:  

寻求一个能实现文本文件逐行倒序的批处理,具体是
最后一行变成第一行,倒数第二行变成第二行,依次类推

2008-2-10 11:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gundam72
初级用户





积分 40
发帖 19
注册 2008-2-9
状态 离线
『第 17 楼』:  

terse兄提供的代码能够正常的随机命名和恢复原名,谢谢帮助~
另外你代码里的随机范围是小写字母,如果我想把大写字母和数字也添加到随机列表里应该怎么改?中文字能否作为随机数?

pinghu兄,你那段代码我复制到文本再改成.bat后可以运行,但是有点问题
比如我在某文件夹里有A001.bmp,A002.bmp,A003.bmp,A004.bmp这4个文件
运行你的bat后输入x然后只有第一个A001.bmp变成了.bmp其他的还是原名,运行了几次都是这样,重命名列表生成了,以下是里面的内容:
A001.bmp .bmp
A002.bmp .bmp
A003.bmp .bmp
A004.bmp .bmp
麻烦了~

2008-2-10 12:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 18 楼』:  更新了程序

@echo off
setlocal enabledelayedexpansion

call :%* 2>nul || goto choice
goto :eof


:choice
set /p aa=安装右键菜单A,卸载右键菜单X:
if %aa%==a goto :install
if %aa%==x (goto :uninstall)else goto :choice
goto :eof

:resume
cd "%~1"
if not exist 重命名列表.txt (echo 这个文件夹里没有“重命名列表.txt”,无法恢复&pause&goto :eof)
for /f "tokens=1,2 delims= " %%c in (重命名列表.txt) do (ren %%d %%c)
goto :eof

:renam
cd "%~1"
if exist 重命名列表.txt echo 当前文件夹下已存在一个重命名列表,再次重命名会导致原文件名列表的丢失,如要重命名先手动删除这个文件夹下的“重命名列表.txt”,这样较为稳妥&pause&goto :eof
set /p nn=请输入随机字母的位数:
if exist 重命名列表.txt del 重命名列表.txt
for %%b in (*.*) do (
call :ranwd2
ren %%~nxb !filename!%%~xb
echo %%~nxb !filename!%%~xb >>重命名列表.txt
)
goto :eof

:ranwd2
set word=
for /l %%a in (1,1,%nn%) 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 set letter=!letter:~%num%,1!
goto :eof

:install
reg add "hkcr\directory\shell\文件夹内文件随机字母重命名\command" /f /t reg_sz /v "" /d "\"%~0\" renam \"%%1\""
    reg add "hkcr\directory\shell\反重命名\command" /f /t reg_sz /v "" /d "\"%~0\" resume \"%%1\""
goto :eof

:uninstall
    reg delete "hkcr\directory\shell\反重命名" /f
    reg delete "hkcr\directory\shell\文件夹内文件随机字母重命名" /f
goto :eof


这个脚本做了如下更新:
调用右键菜单执行
重命名所选中文件夹下的所有文件
随机字母(包括大小写)的位数由你确定
增加了重命名校验

使用方法:
安装时先执行自身一次,再在选中的文件夹上调用鼠标右键,选择命令
卸载时在执行一次
注意: 不要把该批处理放到要执行的目标文件夹里,
如果安装后移动了该批处理,会出错,解决办法是重新安装一次

待解决的问题:
有时需要执行几次恢复,既恢复后如出现有的文件名没有被恢复的情况,再次执行恢复知道完全恢复为之

2008-2-10 13:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 19 楼』:  修正了一个小bug,在发一遍

@echo off
setlocal enabledelayedexpansion

call :%* 2>nul || goto choice
goto :eof


:choice
set /p aa=安装右键菜单A,卸载右键菜单X:
if /a %aa%==a goto :install
if /a %aa%==x (goto :uninstall)else goto :choice
goto :eof

:resume
cd "%~1"
if not exist 重命名列表.txt (echo 这个文件夹里没有“重命名列表

.txt”,无法恢复&pause&goto :eof)
for /f "tokens=1,2 delims= " %%c in (重命名列表.txt) do (ren

%%d %%c)
goto :eof

:renam
cd "%~1"
if exist 重命名列表.txt echo 当前文件夹下已存在一个重命名列表

,再次重命名会导致原文件名列表的丢失,如要重命名先手动删除这个

文件夹下的“重命名列表.txt”,这样较为稳妥&pause&goto :eof
set /p nn=请输入随机字母的位数:
if exist 重命名列表.txt del 重命名列表.txt
for %%b in (*.*) do (
call :ranwd2
ren %%~nxb !filename!%%~xb
echo %%~nxb !filename!%%~xb >>重命名列表.txt
)
goto :eof

:ranwd2
set word=
for /l %%a in (1,1,%nn%) 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 set letter=!letter:~%num%,1!
goto :eof

:install
reg add "hkcr\directory\shell\文件夹内文件随机字母重命名

\command" /f /t reg_sz /v "" /d "\"%~0\" renam \"%%1\""
    reg add "hkcr\directory\shell\反重命名\command" /f /t

reg_sz /v "" /d "\"%~0\" resume \"%%1\""
goto :eof

:uninstall
    reg delete "hkcr\directory\shell\反重命名" /f
    reg delete "hkcr\directory\shell\文件夹内文件随机字母重命

名" /f
goto :eof

2008-2-10 13:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 20 楼』:  



  Quote:
Originally posted by pinghu at 2008-2-10 11:37:
寻求一个能实现文本文件逐行倒序的批处理,具体是
最后一行变成第一行,倒数第二行变成第二行,依次类推

搜索  论坛有



简单!简单!再简单!
2008-2-10 13:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 21 楼』:  再次更新

@echo off
setlocal enabledelayedexpansion

call :%* 2>nul || goto choice
goto :eof


:choice
set /p aa=安装右键菜单A,卸载右键菜单X:
if %aa%==a goto :install
if %aa%==x (goto :uninstall)else goto :choice
goto :eof

:resume
cd "%~1"
if not exist 重命名列表.txt (echo 这个文件夹里没有“重命名列表.txt”,无法恢复&pause&goto :eof)
for /f "tokens=1,2 delims=^|" %%c in (重命名列表.txt) do (ren %%d %%c)
goto :eof

:renam
cd "%~1"
if exist 重命名列表.txt echo 当前文件夹下已存在一个重命名列表,再次重命名会导致原文件名列表的丢失,如要重命名先手动删除这个文件夹下的“重命名列表.txt”,这样较为稳妥&pause&goto :eof
set /p nn=请输入随机字母的位数:
if exist 重命名列表.txt del 重命名列表.txt
for %%b in (*.*) do (
call :ranwd2
ren %%~nxb !filename!%%~xb
echo %%~nxb^|!filename!%%~xb >>重命名列表.txt
)
goto :eof

:ranwd2
set word=
for /l %%a in (1,1,%nn%) 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=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set /a num=%random%%%62
call set letter=!letter:~%num%,1!
goto :eof

:install
reg add "hkcr\directory\shell\文件夹内文件随机字母重命名\command" /f /t reg_sz /v "" /d "\"%~0\" renam \"%%1\""
    reg add "hkcr\directory\shell\反重命名\command" /f /t reg_sz /v "" /d "\"%~0\" resume \"%%1\""
goto :eof

:uninstall
    reg delete "hkcr\directory\shell\反重命名" /f
    reg delete "hkcr\directory\shell\文件夹内文件随机字母重命名" /f
goto :eof

本次更新增加了随机数字

2008-2-10 13:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 22 楼』:  

说明一下,我的系统是Xp,在我的机器上调试成功,不知道是否支持其他的windows系统

2008-2-10 14:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gundam72
初级用户





积分 40
发帖 19
注册 2008-2-9
状态 离线
『第 23 楼』:  

pinghu兄最新的这个代码已经很好的实现我需要的功能了,在功能方面已经没有什么更高的要求了,感谢感谢~
另外...还是要挑些毛病...原谅我...
需要执行几次才能恢复的问题确实存在,不过最后都能恢复。
另外还有一个问题,就是当文件夹内文件比较多时(我测试的是73个文件)进行重命名后文件夹内会出现2个文本,一个名为“重命名列表.txt”,里面的内容如下:重命名列表.txt|A95KDRBLz.txt
另外还有一个名为“A95KDRBLz.txt ”的文本
此时再对该文件夹进行反重命名无效,必须删除重命名列表.txt并将A95KDRBLz.txt 改名为重命名列表.txt才能进行反重命名,并能成功,一个小小的bug吧
个人认为是在对所有文件进行重命名后生成了重命名列表.txt并再一次对该txt文件进行了一次单独的重命名,希望pinghu兄修改一下

2008-2-10 14:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 24 楼』:  

我对200多个图片进行测试,结果跟你测试的结果一样,谢谢你的反馈!!
我会改正的,新的代码正在调试……

2008-2-10 15:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gundam72
初级用户





积分 40
发帖 19
注册 2008-2-9
状态 离线
『第 25 楼』:  

pinghu兄这么认真的帮我解决问题,我只有认真的试用才能略表感谢之意
话说最近忙糊涂了,都忘了还在过年呢
pinghu兄鼠年快乐~

2008-2-10 15:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 26 楼』:  修正了重命名列表被改名的问题

@echo off
setlocal enabledelayedexpansion

call :%* 2>nul || goto choice
goto :eof


:choice
set /p aa=安装右键菜单A,卸载右键菜单X:
if %aa%==a goto :install
if %aa%==x (goto :uninstall)else goto :choice
goto :eof

:resume
cd /d "%~1"
if not exist 重命名列表.txt (echo 这个文件夹里没有“重命名列表.txt”,无法恢复&pause&goto :eof)
for /f "tokens=1,2 delims=^|" %%c in (重命名列表.txt) do (ren %%d %%c)
goto :eof

:renam
cd /d "%~1"
if exist 重命名列表.txt echo 当前文件夹下已存在一个重命名列表,再次重命名会导致原文件名列表的丢失,如要重命名先手动删除这个文件夹下的“重命名列表.txt”,这样较为稳妥&pause&goto :eof
set /p nn=请输入随机字母的位数:
if exist 重命名列表.txt del 重命名列表.txt
for %%b in (*.*) do (
if "%%~nxb"=="重命名列表.txt" goto :eof
call :ranwd2
ren %%~nxb !filename!%%~xb
echo %%~nxb^|!filename!%%~xb >>重命名列表.txt
)
goto :eof

:ranwd2
set word=
for /l %%a in (1,1,%nn%) 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=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set /a num=%random%%%62
call set letter=!letter:~%num%,1!
goto :eof

:install
reg add "hkcr\directory\shell\文件夹内文件随机字母重命名\command" /f /t reg_sz /v "" /d "\"%~0\" renam \"%%1\""
    reg add "hkcr\directory\shell\反重命名\command" /f /t reg_sz /v "" /d "\"%~0\" resume \"%%1\""
goto :eof

:uninstall
    reg delete "hkcr\directory\shell\反重命名" /f
    reg delete "hkcr\directory\shell\文件夹内文件随机字母重命名" /f
goto :eof


最后一个问题仍然有待解决
需要多次恢复才行的问题,这个问题可能是由于计算机运算系统造成
我拿1200多个文件进行了试验,发现恢复需要一百多次,文件多的时候这是个不小的bug吧

同样祝你新年快乐,家人平安!!

2008-2-10 15:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 27 楼』:  修正了不能一次恢复的漏洞

@echo off
setlocal enabledelayedexpansion

call :%* 2>nul || goto choice
goto :eof


:choice
set /p aa=安装右键菜单A,卸载右键菜单X:
if %aa%==a goto :install
if %aa%==x (goto :uninstall)else goto :choice
goto :eof

:resume
cd /d "%~1"
if not exist 重命名列表.txt (echo 这个文件夹里没有“重命名列表.txt”,无法恢复&pause&goto :eof)
del 临时.txt 2>nul
for /F "tokens=1* delims=:" %%i in ('findstr /n .* 重命名列表.txt') do set "line=%%i" &set "num%%i=%%j"
for /L %%i in (!line!,-1,1) do (>> 临时.txt echo.!num%%i!)
for /f "tokens=1,2 delims=^|" %%c in (临时.txt) do (ren %%d %%c)
del 临时.txt
goto :eof

:renam
cd /d "%~1"
if exist 重命名列表.txt echo 当前文件夹下已存在一个重命名列表,再次重命名会导致原文件名列表的丢失,如要重命名先手动删除这个文件夹下的“重命名列表.txt”,这样较为稳妥&pause&goto :eof
set /p nn=请输入随机字母的位数:
for %%b in (*.*) do (
if "%%~nxb"=="重命名列表.txt" goto :eof
call :ranwd2
ren %%~nxb !filename!%%~xb
echo %%~nxb^|!filename!%%~xb >>重命名列表.txt
)
goto :eof

:ranwd2
set word=
for /l %%a in (1,1,%nn%) 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=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set /a num=%random%%%62
call set letter=!letter:~%num%,1!
goto :eof

:install
reg add "hkcr\directory\shell\文件夹内文件随机字母重命名\command" /f /t reg_sz /v "" /d "\"%~0\" renam \"%%1\""
    reg add "hkcr\directory\shell\反重命名\command" /f /t reg_sz /v "" /d "\"%~0\" resume \"%%1\""
goto :eof

:uninstall
    reg delete "hkcr\directory\shell\反重命名" /f
    reg delete "hkcr\directory\shell\文件夹内文件随机字母重命名" /f
goto :eof

我对2000多个文件测试成功,不满意的话再回帖

2008-2-10 16:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 28 楼』:  

再上一个 没进行多文件测试
@echo off
for /f "delims=" %%i in ('dir /b /a-d "重命名*.bat" 2^>nul') do set n=%%~ni
set n=%n:重命名=%
if not exist 重命名.bat set fils=重命名.bat&&goto choice
set/a n+=1
set fils=重命名%n%.bat
:choice
set /p aa=重命名X  恢复H
if %aa%==x goto renam
if %aa%==h (goto resume) else goto :choice
goto :eof
:renam
for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
    call :loop "%%i"
)
pause
goto :eof
:loop
for /l %%i in (1,1,10) do (call :lp)
>>%fils% echo ren "%var%.jpg" %1
ren %1 "%var%.jpg"
for %%i in (n var) do set %%i=
goto :eof
:lp
set str=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
set/a s=%random%%%62
call set var=%var%%%str:~%s%,1%%
goto :eof
:resume
if not exist 重命名.bat (echo 之前没有进行重命名操作 无法恢复&pause&goto :eof)

echo 之前共操作了%n%次重命名
set/p t=恢复之前第几次操作
set/a t-=1
if %n% equ 1 set fils=重命名.bat &&goto resume2
:hf
set/a n-=1
set fils=重命名%n%.bat
:resume2
if %n% equ 0 set fils=重命名.bat
call %fils%
del %fils%
if %n% equ %t% goto :eof
goto hf



简单!简单!再简单!
2008-2-10 17:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 29 楼』:  

terse兄,我帮你测试了,提示我找不到文件!

2008-2-10 17:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 30 楼』:  

这个代码只能支持jpg文件的重命名,还需要改进一下

2008-2-10 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: