标题: [文件操作] [已解决]批处理批量重命名文件或者文件夹还有命名还原功能 [打印本页]
作者: findjay 时间: 2009-7-23 23:26 标题: [已解决]批处理批量重命名文件或者文件夹还有命名还原功能
咨询内容,以下为以前的旧版,新版请看523066680在本帖7楼的写的内容,知错能改,应该还是好孩子吧!帖子的问题已经于7.27已经完美解决,谢谢大家。(后面的跟帖为解决答案)
请帮我制作重命名批处理
功能:先询问用户是否在完成命名后选择是否生成将命名文件或目录还原的批处理及被重命名的文件或者文件夹清单(txt格式),如果用户要需输入good不要需输入I do not need,然后让用户输入文件或者文件夹存放地址{可以修改文件夹下所有文件的文件名},然后询问用户要哪种命名方式,1.给所有文件或者文件末尾加个字母s,2。可以随便命名任何后缀名的文件,并且我只要bak1~bakn就可以了,比如bak1.txt bak2.txt bak3.txt ,然后就说完成,如果之前选择在完成命名后选择生成将命名文件或目录还原的批处理,那就显示 重命名完成,还原文件已经在此软件的文件夹下,谢谢使用****作品,如果之前输入I do not need,则显示重命名完成,谢谢使用****作品(最好批处理能美化下,背景为绿色)
请大家帮帮忙
[ 本帖最后由 findjay 于 2009-7-27 07:48 编辑 ]
作者: 523066680 时间: 2009-7-24 21:59
建议
把 文字说明简洁化,排版 然后一次说明
然后像输入参数一样,把所有决策一次输入。
选项上建议改成 Y / N 形式,方便输入。
假如是一步步的,我觉得顺序也应该稍微改改~ 俺有事先忙去了哈……
虽然你的id上有jay字眼……
作者: more 时间: 2009-7-24 22:04
这是来学习的论坛,不是索取代码的地方,如果只想要个代码就走人,没人会帮你,如果想学习,论坛里到处都是可以学习的地方...
作者: Lumiere 时间: 2009-7-24 22:12
最烦人的是问的人自己太儿戏,太所谓了,写的东西像天书,这样只增加别人的反感
作者: namejm 时间: 2009-7-24 23:06
平心而论,本论坛虽然是学习型论坛,但是,也不排斥索取代码的帖子,因为这些帖子也会引发大家的思考和讨论,会推动学习的深入;但是,论坛对仅仅索取代码、只顾把自己的需求一股脑全部塞给别人,自己却不考虑如何让别人迅速理解自己意图的帖子(简而言之,就是要求很多、但是表述混乱的帖子),基本上是冷处理为主,因为这些帖子让别人理解起来非常吃力、并且工程量之大,足以让人望而却步。还请楼主掌握一些发帖技巧,以己度人,尽量减轻解答人的负担。
作者: 523066680 时间: 2009-7-25 09:09
呼,昨晚试着整理了楼主的要求文字,因为感觉按题目做出来的批处理也不会很好用。
所以就做不下去了……
建议楼主进入本论坛的其中一个群(首页有个栏目会介绍批处理群)
找找群里的共享资料,学学然后,试着做,有攻不透的地方可以在群里或论坛询问。
我的网盘 最后一个目录里面也有批处理资料 http://523066680.ys168.com
(>教程\批处理)
[ 本帖最后由 523066680 于 2009-7-25 09:11 编辑 ]
作者: 523066680 时间: 2009-7-26 08:37
楼主对信息进行了整理,看得出来很有诚意,发到我的短信息里来了
我现在代发上来。由于我暂时没有编写的环境条件,望有时间的朋友可以帮帮忙
功能就是:
1、能给指定的文件进行重命名(如果用户输入的地址为文件夹,那将重命名文件夹下所有文件)
2、重命名之后,能生成重命名名单。为了防止出错,给用户反悔的机会,会生成还原原文件名。
我要的效果:给所有文件或者文件末尾加个字母s,2。可以随便命名任何后缀名的文件,并且我只要1bak加文件名~nbak加文件名就可以了,比如1.txt,2.txt,3.txt批处理后为1bak1.txt 2bak2.txt 3bak3.txt,批处理背景颜色为绿色。
这个代码的实际用途:用来帮助别人的 重命名文件的 我是主管 很多时候公司的电脑都叫我帮他们看下电脑,最近有了这个批处理就能提高维护电脑的效率,节省不必要的时间浪费,请大家帮帮忙——
[ 本帖最后由 523066680 于 2009-7-26 08:39 编辑 ]
作者: findjay 时间: 2009-7-26 09:42 标题: 回复 7楼 的帖子
刚刷完牙回来,我呢,我平时很少上各论坛发表和回复内容不晓得贵站要求,再加上本人才疏学浅,
导致第一次发帖时就被namejm当头一棒(把我的帖子关闭了),经过我和namejm的qq上面的积极沟通和交流,渐渐懂得要
怎么把帖子发好了——
以下为比较有启发性的聊天内容,看看对大家很有教育性的。
█████ 0:47:51
那我那个帖子 的事基本上是冷处理为主,因为这些帖子让别人理解起来非常吃力、并且工程量之
大,足以让人望而却步。
回复批处理之家站长 0:48:33
你在顶楼的描述比较混乱
别人一下子理解不了你的真正意图
批处理之家站长 0:52:31
我不会向你收取任何报酬的
回复批处理之家站长 0:52:48
我们论坛本来就是免费为大家提供帮助的地方
很多时候
帮别人写代码
是需要了解这个代码的用途的
从而衡量这个代码值不值得去写
回复批处理之家站长 1:02:53
说实话
你在顶楼的那些要求都可以做到
但是
你在描述问题的时候
在关键的地方没有做详细的描述
仅仅是一些大而化之的模糊语言
别人无从下手
批处理之家站长 1:05:04
要修改的文件都长什么模样?
重命名遵循什么样的规则?
修改后有什么样的效果?
这些都是重点
都需要数据
你应该举例说明
如果举例说明不足以描述,或者容易导致歧义
应该抓图,或者上传原始数据
批处理之家站长 1:07:13
还有
你在顶楼的描述使用了太多的长句
别人看起来很吃力
很容易产生歧义
回复批处理之家站长 1:12:05
该详细的地方
你以一定要不厌其烦地详加描述
切不可一言带过
否则,别人无从下手,还容易理解错误
批处理之家站长 1:12:58
让解题人逐条复核你的问题
这是提问的大忌
回复批处理之家站长 1:13:44
要为解题人多考虑
回复批处理之家站长 1:17:40
你应该把完整的过程写完
不应该只交代只言片语
你要知道
虽然你十分清楚整个过程
只需要提到一两个要点就知道是在哪个流程下
但是对别人来说,别人完全不知道整个流程是怎么走的
只提到一两点的话
别人根本就不知道怎么回事
回复批处理之家站长 1:18:54
1、不要让解题人逐条复核你的问题
2、不要让解题人只了解其一而不知道整个流程
3、话不要只提一两要点,要完整地描述清楚
回复批处理之家站长 1:23:08
在提问之前
先想一想:
别人为什么要帮我?
怎样才能让别人乐意帮助我?
——论坛里很多人不是冲着报酬来的
而是冲着能用自己所学帮助别人、锻炼自己水平的目的来的
当别人要花上1个小时才能弄明白你的意思
然后,只需要花10分钟就能写出代码
你想,愿意做的人还多吗?
希望大家能引以为鉴,我再发下可能很多人都没看的系统消息,我跟它是相见恨晚呀
尊敬的findjay,祝贺您成为批处理之家论坛的会员。
由于批处理之家属于技术性论坛,与娱乐站点有显著的差别,所以,无论是帖子的标题,还是帖子
的内容,我们论坛都有比较严格的要求。之所以要对帖子严加管束,主要是为了方便论坛日后的搜索
,让大家能快速找到自己所需要的帖子,希望大家能理解论坛的一片苦心,所以,在发帖之前,请务
必熟悉一下本论坛的 发帖规则 (http://bbs.bathome.net/thread-963-1-1.html),以免在您发帖
之后,造成被扣分、警告、删帖、封ID等处罚——当然,我们的要求并不苛刻,只要养成了良好的发
帖习惯,您将会发现,要达到总版规的要求其实并不难。
预祝您在论坛里过得愉快。
批处理之家论坛全体管理人员
2009-7-23 22:39
希望所有的批处理之家的会员们能在论坛开心,挑战自我,学习交流;不懂就问,论坛上还是有很多
管理员是很热情的哦,谢谢大家能阅读完我所写的。
哦,对了,我自己批处理没想去学,因为有更重要的项目我要去完成,批处理只能看懂少量代码,因为我英语懂一点,初中三年英语科代表,呵呵,大家有兴趣跟我交朋友可以加我qq:5077 18778(去掉号码中间的空格,要注明来自批处理之家)不知道我打这小广告会不会受罚——思考ing
[ 本帖最后由 findjay 于 2009-7-27 21:31 编辑 ]
作者: 523066680 时间: 2009-7-26 09:46
这个"广告"只算为了学习~ 一般而言论坛严禁 卖东西的广告
我正在做了,如果我觉得我做的可以,就会拿上来。
作者: findjay 时间: 2009-7-26 10:52 标题: 回复 9楼 的帖子
呵,好的,在此先谢谢您了,有劳了——
作者: 523066680 时间: 2009-7-26 13:34
为了操作,批处理方式打包发上来了
执行以下批处理(在windows下适用) 将生成smalltool文件夹
然后工具rn.bat放在里面
执行rn.bat的某个后,该文件夹生成back.bat文件,如果需要还原
操作,则双击back.bat 暂时只支持一次操作恢复。
如果要实现多个恢复,得费些功夫了……
恢复功能暂时之回复- ::打包:if_exist 打包工具http://bbs.bathome.net/viewthread.php?tid=2618
- @set file="rn.bat"
- @echo off
- if not exist smalltool md smalltool
- for %%a in (%file%) do (call :setup %%~a)
- exit
- :setup
- set "act="
- for /f "delims= eol=" %%a in (%~nx0) do (
- if "%%a"=="::%* end" (goto :eof)
- if defined act echo,%%a>>"smalltool\%*"
- if "%%a"=="::%*" errcommand>"smalltool\%*" 2>nul&set act=act
- )
- ::rn.bat
- @echo off &setlocal enabledelayedexpansion
- title 批量重命名工具
- echo, &echo, 请输入将执行批量重命名操作的路径,如: F:\tempfolder\
- echo, &echo, 注: 输入路径不需要加双引号,由批处理做统一处理.
- echo,
- :a
- set /p inp="请输入操作路径:"
- if not exist "%inp%" (echo, -输入不正确&echo, &goto :a)
- if not "%inp:~-1%"=="\" (set inp=%inp%\)
- :b
- set /p inp2="请输入将要批量重命名的文件的格式(如: txt):"
- if not exist "%inp%*.%inp2%" (echo, 不存在该格式 &echo, &goto :b)
- :c
- echo,@echo off>back.bat
- echo,&echo, 1 批量把%inp% 目录下的 %inp2%文件按pak1~pakn 顺序重命名
- echo,&echo, 2 批量给文件后缀加s
- echo,
- set /p inp3="请选择操作模式:"
- if "%inp3%"=="1" (goto :listname)
- if "%inp3%"=="2" (goto :adds) else (echo, -请正确输入 &goto :c)
- :listname
- set /a n=1
- ren "%inp%*.%inp2%" *.x_x
- ::上面这句ren是为了避免偶尔出现的细节上的冲突
- for /f "tokens=*" %%a in ('dir "%inp%*.x_x" /b') do (
- echo,ren "%inp%pak!n!.%inp2%" "%%a">>back.bat
- ren "%inp%%%a" pak!n!.%inp2%
- set /a n+=1
- )
- echo,ren "%inp%*.x_x" *.%inp2%>>back.bat
- goto :over
- :adds
- ren "%inp%*.%inp2%" *.%inp2%s
- echo,ren "%inp%*.%inp2%s" *.%inp2%>>back.bat
- goto :over
- :over
- echo,任务结束。Press any key to exit...
- pause>nul &exit
- ::rn.bat end
复制代码
[ 本帖最后由 523066680 于 2009-7-26 16:46 编辑 ]
作者: 523066680 时间: 2009-7-26 14:44
楼主的这个帖子的题目要改改,类似:批量重命名和恢复操作
原题目别人一看“批处理如何重命名文件或者文件夹” ,不就是直接ren?
作者: 523066680 时间: 2009-7-26 16:51
已经对出现的失误进行了修改,做个评审吧~。
改颜色的话就自己来啦……
[ 本帖最后由 523066680 于 2009-7-26 16:53 编辑 ]
作者: 523066680 时间: 2009-7-26 18:55
按你的要求,实现了可选择多个恢复的功能
下面代码执行生成 smalltool 文件夹 里面有 rn.bat 和 Returnx.bat
执行 rn.bat 后 生成backz.cmd
再次rn.bat的话 原来的back批处理会被加上编号,然后生成新的 backz.cmd
backz.cmd都是刚生成的。rn.bat会在back批处理首行写入时间和操作信息。
这个时候如果要恢复,可以打开Returnx.bat
它会列出每个back批处理对应的时间和当时选择的操作数,这个时候自己根据信息选择
一个Back文件名,输入。
通过Returnx.bat 执行 back 操作,会对应的删除那个back文件。
每次执行rn.bat的时候都会对back文件名做整理使其按顺序排好名字
- @set file="rn.bat" "Returnx.bat"
- @echo off
- for %%a in (%file%) do (call :setup %%~a)
- exit
- :setup
- if not exist smalltool md smalltool
- set "act="
- for /f "delims= eol=" %%a in (%~nx0) do (
- if "%%a"=="::%* end" (goto :eof)
- if defined act echo,%%a>>"smalltool\%*"
- if "%%a"=="::%*" errcommand>"smalltool\%*" 2>nul&set act=act
- )
- ::Returnx.bat
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ('dir back* /b') do (
- set /p now=<%%a
- echo, %%~na -- !now!
- )
- set /p cho="输入对应的还原批处理脚本名称(无需格式):"
- call %cho%.cmd
- del %cho%.cmd
- echo,执行完成
- pause
-
- ::Returnx.bat end
- ::rn.bat
- @echo off &setlocal enabledelayedexpansion
- title 批量重命名工具
- echo, &echo, 请输入将执行批量重命名操作的路径,如: F:\tempfolder\
- echo, &echo, 注: 输入路径不需要加双引号,由批处理做统一处理.
- echo,
- :a
- set /p in="请输入操作路径:"
- if not exist "%in%" (echo, -输入不正确&echo, &goto :a)
- if not "%in:~-1%"=="\" (set in=%in%\)
- :b
- set /p in2="请输入将要批量重命名的文件的格式(如: txt):"
- if not exist "%in%*.%in2%" (echo, 不存在该格式 &echo, &goto :b)
- :
- set bk=1
- :sortback
- if exist back* (set "inp=%~dp0" &set "inp2=cmd" &set "spc=back" &call :listname ::)
- set inp=%in%
- set inp2=%in2%
-
- :
- echo,&echo, 1 批量把%inp% 目录下的 %inp2%文件按pak1~pakn 顺序重命名
- echo,&echo, 2 批量给文件后缀加s
- echo,
- :
- :c
- set /p inp3="请选择操作模式:"
- echo,::%date% , %time% , %inp% 选择的操作 %inp3% >backz.cmd
- if "%inp3%"=="1" (goto :listname)
- if "%inp3%"=="2" (goto :adds) else (echo, -请正确输入 &goto :c)
-
- :listname
- if "%1"=="" (set spc=pak)
- set /a n=1
- ren "%inp%*.%inp2%" *.x_x
- ::上面这句ren是为了避免偶尔出现的细节上的冲突
- for /f "tokens=*" %%a in ('dir "%inp%*.x_x" /b') do (
- %1 echo,ren "%inp%%spc%!n!.%inp2%" "%%a">>backz.cmd
- ren "%inp%%%a" %spc%!n!.%inp2%
- set /a n+=1
- )
- %1 echo,ren "%inp%*.x_x" *.%inp2%>>backz.cmd
- if "%1"=="::" (goto :eof)
- goto :over
- :
- :adds
- ren "%inp%*.%inp2%" *.%inp2%s
- echo,ren "%inp%*.%inp2%s" *.%inp2%>>backz.cmd
- goto :over
- :
- :over
- echo,任务结束。Press any key to exit...
- pause>nul &exit
-
- ::rn.bat end
复制代码
[ 本帖最后由 523066680 于 2009-7-26 19:02 编辑 ]
作者: findjay 时间: 2009-7-26 19:04 标题: 回复 14楼 的帖子
14楼的 代码有误,运行后自动退出
作者: 523066680 时间: 2009-7-26 19:06
我算是仁至义尽了,楼主可不要有下个帖子这样,我会抓狂。
说明要排版好,重点要抓好,重要细节要说明。不要等别人写得老久,又提出"新的要求"
还有,如果还有类似的请求,请自己学好,做的过程有问题再来问,不是每个人都愿意这么费力帮忙。
我第一次像尽义务一样帮到这个程度。真的要用批处理,请自己学好它。
----看在jay的份上
[ 本帖最后由 523066680 于 2009-7-26 19:09 编辑 ]
作者: 523066680 时间: 2009-7-26 19:13 标题: 回复 15楼 的帖子
我这边执行14楼的代码没有任何错误。
请把原来的smalltool删除 保存14楼代码的时候请用这个名字 parcel.bat
再执行看看
另外,如果你说的是parcel.bat自动退出,这个parcel本身就是个包裹,分解后就是要自动退出的。
下面我上传了一个 smalltool.rar
作者: findjay 时间: 2009-7-27 07:23 标题: 回复 17 楼16楼 的帖子
这位仁兄已经把我要的批处理做得很人性化了,大家赶快下载体验下吧,使用步骤为先运行parcel.bat,运行完后去运行主程序rn.bat,还原重命名的批处理为Returnx.bat,非常实用。我喜欢jay,你也喜欢jay,但我很不想看到16楼中这几个字----看在jay的份上,但这也是情有可原,毕竟这个作品有点让您劳碌伤神,我想要做就做精品一点的,不然网上的重命名批处理一大堆,根本达不到您523066680的这种高制作水准,在此为您的无私帮助行为致以深深的鞠躬(好像您看不到哦),我不是管理员不然我给您点奖励。还有要谢谢的大家的批评和指导。因为有了您的批评和指导我才能更好地走向一个好的批处理之家的优秀会员。再次谢谢批评我帮助我的每个热心的批处理之家的会员们,我会做得更好, I firmly believe that you believe me?
[ 本帖最后由 findjay 于 2009-7-27 07:29 编辑 ]
作者: findjay 时间: 2009-7-27 07:39 标题: 回复 16楼 的帖子
已经通过评分方式给您送去了10个pb(最多就只能送10个pb),谢谢,刷牙去了——
作者: 523066680 时间: 2009-7-27 09:32
现在感觉欣慰多了~
昨天因为在这件事上花的时间较多,后来又要修改所以耐心消磨掉了
发了点火不好意思……
作者: PakTC 时间: 2009-7-27 09:53
if_exist 最近爆冷门, 到哪儿那儿冷清。基本上这几个月论坛里愿意根if_exist 对话的也就 楼主你了~
唉……
作者: Batcher 时间: 2009-7-27 10:37 标题: 回复 18楼 的帖子
并非只有管理人员才能给他人加分。不同级别的会员,给他人加分的上限也不同。具体可参考:
http://bbs.bathome.net/thread-1869-1-1.html
作者: findjay 时间: 2009-7-27 11:14 标题: 回复 20楼 的帖子
呵呵,没关系,我能理解,你怎么又送我10pb,难道是礼尚往来?(偷笑ING)
作者: findjay 时间: 2009-7-27 12:06 标题: 回复 21楼 的帖子
您的态度很消极哦,我希望大家都能振作起来,共创美好的批处理之家!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |