标题: [文本处理] 【已解决】批处理重命名指定目录下所有日志文件并输出结果到文件 [打印本页]
作者: hkmhd 时间: 2009-3-26 15:33 标题: 【已解决】批处理重命名指定目录下所有日志文件并输出结果到文件
功能:对C盘内所有的.log文件进行一个名字修改已达到备份目的,在操作结束后恢复被备份的文件
PS:此批处理非完整的批处理,原批处理还包含对C盘所有的log文件进行删除(也就是大家都在用的垃圾清理的东东),为了检验效果所以把备份以及恢复分开两个批处理。
想问一下,我的Del操作是在Echo之前的,被操作的文件有三个,分别是“C盘根目录、C:\MJXX、C:\新建文件夹”中的三个install.log文件
但是执行的结果是被输出的文本只记录到最后一条信息,是因为IF处理到下一条内容后,执行了DEL所以在输出的时候没有前一条的记录吗?
如果是的话,是否只能把DEL放置于FOR之前?
另外,这命令还能不能精简呢?-
- @echo off
- color a
- echo 正在备份install.log...
- for /R . %%i in (install.log) do (
- if exist "%%i" (
- del %systemdrive%\被修改的install.log记录.txt >nul 2>nul
- echo "%%i.bak" >>%systemdrive%\被修改的install.log记录.txt
- ren "%%i" install.log.bak
- ))
- echo 备份完毕
- pause
复制代码
-
- @echo off
- color a
- echo 正在恢复Install.log...
- for /f "tokens=*" %%i in (%systemdrive%\被修改的install.log记录.txt) do (
- if exist "%%i" (
- del /q /f %systemdrive%\被恢复的Install.log记录.txt >nul 2>nul
- echo %%i >>%systemdrive%\被恢复的Install.log记录.txt
- ren "%%i" install.log
- ))
- echo 恢复完毕
- pause
复制代码
[ 本帖最后由 hkmhd 于 2009-3-26 17:12 编辑 ]
作者: Batcher 时间: 2009-3-26 15:49
建议不管多简单的代码,都应该在提问时把它要实现的功能详细的描述一下。以便他人查看和理解。
作者: hkmhd 时间: 2009-3-26 16:12
果然还是被说了,功能已经加上去了,不过我自己对标题很不满意~呵呵~不知道这个帖子应该起一个什么标题
作者: 随风 时间: 2009-3-26 16:16
你的标题确实是非常不标准,还是先用心想个新的标题吧,
作者: Batcher 时间: 2009-3-26 16:27
//原批处理还包含对C盘所有的log文件进行删除(也就是大家都在用的垃圾清理的东东)
参考:网上流传的“删除系统垃圾的批处理”其实本身就是一个垃圾
http://bbs.bathome.net/viewthread.php?tid=684#pid7625
//但是执行的结果是被输出的文本只记录到最后一条信息,是因为IF处理到下一条内容后,执行了DEL所以在输出的时候没有前一条的记录吗?
是的。
//如果是的话,是否只能把DEL放置于FOR之前?
可以。
//另外,这命令还能不能精简呢?
在精简代码之前,还是先把bug修复掉吧:- @echo off
- color a
- echo 正在备份install.log...
- del %systemdrive%\被修改的install.log记录.txt >nul 2>nul
- for /r . %%i in (install.log) do (
- if exist "%%i" (
- if not exist "%%i\" (
- echo "%%i.bak">>%systemdrive%\被修改的install.log记录.txt
- ren "%%i" install.log.bak
- )
- )
- )
- echo 备份完毕
- pause
复制代码
作者: hkmhd 时间: 2009-3-26 16:45
-
- @echo off
- color a
- echo 正在备份install.log...
- del %systemdrive%\被修改的install.log记录.txt >nul 2>nul
- for /r . %%i in (install.log) do (
- if exist "%%i" (
- if not exist "%%i\" (
- echo "%%i.bak">>%systemdrive%\被修改的install.log记录.txt
- ren "%%i" install.log.bak
- )
- )
- )
- echo 备份完毕
- pause
复制代码
为何要做两次判断呢?还有第二个为何是"%%i\"?
我个人不装数据库,也很少软件生成日志在C盘,日志的内容是使用if来选择性保留清除的,所以对我个人的威胁不大
我也感觉网上的那些很恶心,所以我还是定制一个属于我自己的好~呵呵~谢谢关心
作者: Batcher 时间: 2009-3-26 16:48 标题: 回复 6楼 的帖子
做两次判断是为了排除同名文件夹
作者: hkmhd 时间: 2009-3-26 16:56
哦,学习了,不过什么情况下会出现这样的同名文件夹呢?
PS:Batcher兄对这类清理的东东很痛恨,不过Batcher兄是否也有自己做一个适合自己用的呢?
作者: Batcher 时间: 2009-3-26 17:03 标题: 回复 8楼 的帖子
假设C:\test1\下有个文件夹叫做install.log
假设C:\test2\下有个文件叫做install.log
if exist "%%i" 是无法区分文件夹和文件的,它的返回结果都是真,这就是问题所在了。
作者: hkmhd 时间: 2009-3-26 17:12
彻底明白了~谢谢指导
还是那句话,对Batcher兄的痛恨很感兴趣,很想了解Batcher兄有没有使用类似垃圾清理的东东
作者: Batcher 时间: 2009-3-26 17:16 标题: 回复 10楼 的帖子
是的,我很讨厌那种代码,我没有使用过,将来也不打算使用。
作者: hkmhd 时间: 2009-3-26 18:28
呵呵,或许最后我只会使用一种,就是清空用户的临时文件夹~这个总不会讨厌了吧
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |