Board logo

标题: [文本处理] 【已解决】批处理重命名指定目录下所有日志文件并输出结果到文件 [打印本页]

作者: hkmhd    时间: 2009-3-26 15:33     标题: 【已解决】批处理重命名指定目录下所有日志文件并输出结果到文件

功能:对C盘内所有的.log文件进行一个名字修改已达到备份目的,在操作结束后恢复被备份的文件
PS:此批处理非完整的批处理,原批处理还包含对C盘所有的log文件进行删除(也就是大家都在用的垃圾清理的东东),为了检验效果所以把备份以及恢复分开两个批处理。

想问一下,我的Del操作是在Echo之前的,被操作的文件有三个,分别是“C盘根目录、C:\MJXX、C:\新建文件夹”中的三个install.log文件
但是执行的结果是被输出的文本只记录到最后一条信息,是因为IF处理到下一条内容后,执行了DEL所以在输出的时候没有前一条的记录吗?
如果是的话,是否只能把DEL放置于FOR之前?
另外,这命令还能不能精简呢?
  1. @echo off
  2. color a
  3. echo 正在备份install.log...
  4. for /R . %%i in (install.log) do (
  5. if exist "%%i" (
  6. del %systemdrive%\被修改的install.log记录.txt >nul 2>nul
  7. echo "%%i.bak" >>%systemdrive%\被修改的install.log记录.txt
  8. ren "%%i" install.log.bak
  9. ))
  10. echo 备份完毕
  11. pause
复制代码
  1. @echo off
  2. color a
  3. echo 正在恢复Install.log...
  4. for /f "tokens=*" %%i in (%systemdrive%\被修改的install.log记录.txt) do (
  5. if exist "%%i" (
  6. del /q /f %systemdrive%\被恢复的Install.log记录.txt >nul 2>nul
  7. echo %%i >>%systemdrive%\被恢复的Install.log记录.txt
  8. ren "%%i" install.log
  9. ))
  10. echo 恢复完毕
  11. 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修复掉吧:
  1. @echo off
  2. color a
  3. echo 正在备份install.log...
  4. del %systemdrive%\被修改的install.log记录.txt >nul 2>nul
  5. for /r . %%i in (install.log) do (
  6.   if exist "%%i" (
  7.     if not exist "%%i\" (
  8.       echo "%%i.bak">>%systemdrive%\被修改的install.log记录.txt
  9.       ren "%%i" install.log.bak
  10.     )
  11.   )
  12. )
  13. echo 备份完毕
  14. pause
复制代码

作者: hkmhd    时间: 2009-3-26 16:45

  1. @echo off
  2. color a
  3. echo 正在备份install.log...
  4. del %systemdrive%\被修改的install.log记录.txt >nul 2>nul
  5. for /r . %%i in (install.log) do (
  6.   if exist "%%i" (
  7.     if not exist "%%i\" (
  8.       echo "%%i.bak">>%systemdrive%\被修改的install.log记录.txt
  9.       ren "%%i" install.log.bak
  10.     )
  11.   )
  12. )
  13. echo 备份完毕
  14. 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