Board logo

标题: [文本处理] 求助批处理利用if控制for循环处理文本错在哪里? [打印本页]

作者: whon    时间: 2009-3-14 14:09     标题: 求助批处理利用if控制for循环处理文本错在哪里?

写了一段代码,目的是给当前文件夹中的txt文件加上个文件头,代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t1=D8888D贴子标题-------------------------------------------------------
  4. set t3=D8888D主贴内容-------------------------------------------------------
  5. set t=
  6. for %%i in (*.txt) do (
  7. set /p t= < %%i
  8. if !t!==t1 goto nextfile
  9. echo %t1% > file.tmp
  10. echo !t! >> file.tmp
  11. echo %t3% >> file.tmp
  12. type "%%i" >> file.tmp
  13. del /f /q "%%i"
  14. ren file.tmp "%%i"
  15. :nextfile
  16. )
  17. pause
  18. exit
复制代码
屏蔽if行后运行正常,估计有错,请教各位,谢谢先。
ps:if行的目的是实现判断是否已经加过文件头。

[ 本帖最后由 whon 于 2009-3-15 11:16 编辑 ]
作者: tireless    时间: 2009-3-14 14:42

标签不能在 for 里面。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t1=D8888D贴子标题-------------------------------------------------------
  4. set t3=D8888D主贴内容-------------------------------------------------------
  5. for %%i in (*.txt) do (
  6.   set /p t= < %%i
  7.   if not "!t!"=="%t1%" (
  8.     (echo %t1%&echo !t!&echo %t3%&type "%%i")>file.tmp
  9.     move file.tmp "%%i"
  10.   )
  11. )
复制代码

作者: Batcher    时间: 2009-3-14 14:49

本版规则
1、求代码、寻求代码解释、探讨代码得失的帖子均可发在本版块,其余话题禁止在本版讨论;
2、求助时,务必在顶楼一次性把问题交代清楚;若文字难以表述,请配图说明,或是上传附件;但是,一切操作应从节约论坛资源的角度出发,能文字说明清楚的就无需再发图片,小图能说明问题的尽量不截全图,在不影响效果的前提下尽量压缩图片及附件;
3、所发代码若不止一行,请务必用code标记把代码部分首尾括起来,以便他人复制;


Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html
作者: whon    时间: 2009-3-14 15:22

原帖由 Batcher 于 2009-3-14 14:49 发表


Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html

多谢提醒 已修改
作者: whon    时间: 2009-3-14 15:33

原帖由 tireless 于 2009-3-14 14:42 发表
标签不能在 for 里面。@echo off
setlocal enabledelayedexpansion
set t1=D8888D贴子标题-------------------------------------------------------
set t3=D8888D主贴内容------------------------------------ ...


原来如此多谢 我试了if else 还是不行 能否指点一下?
作者: tireless    时间: 2009-3-14 15:58     标题: 回复 5楼 的帖子

出错提示是什么?txt 文件没有被修改?file.tmp 没有被删除?
作者: whon    时间: 2009-3-14 16:20

运行结果是:没有运行结果。文本没有修改,cmd运行窗口也是一闪而过。屏蔽if行以后运行正常,修改文本的目的也能实现。说明出错在if行。if !t!==t1 这样表达对吗?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t1=D8888D贴子标题-------------------------------------------------------
  4. set t3=D8888D主贴内容-------------------------------------------------------
  5. set t=
  6. rem set /a sum=0
  7. for %%i in (*.txt) do (
  8. set /p t= < %%i
  9. echo !t!
  10. pause
  11. if !t! neq %t1% (
  12. echo %t1% > file.tmp
  13. echo !t! >> file.tmp
  14. echo %t3% >> file.tmp
  15. type "%%i" >> file.tmp
  16. del /f /q "%%i"
  17. ren file.tmp "%%i"
  18. )else(echo 该文件已有标签!&pause)
  19. )
  20. pause
  21. exit
复制代码

作者: more    时间: 2009-3-14 17:13

把多余的空格去掉!!!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "t1=D8888D贴子标题-------------------------------------------------------"
  4. set "t3=D8888D主贴内容-------------------------------------------------------"
  5. set "fl=file.tmp"
  6. for %%i in (*.txt) do (
  7.   set /p t=<"%%i"
  8.   if /i not "!t!"=="%t1%" (
  9.     >%fl% echo %t1%
  10.     >>%fl% echo !t!
  11.     >>%fl% echo %t3%
  12.     >>%fl% type "%%i"
  13.     move /y %fl% "%%i"
  14.   ) else (echo 该文件已有标签!)
  15. )
  16. pause
复制代码

[ 本帖最后由 more 于 2009-3-14 17:16 编辑 ]
作者: whon    时间: 2009-3-14 18:32

多谢多谢!不仅解决了问题而且精简许多,学习学习!
作者: whon    时间: 2009-3-14 18:55

实际处理过程中遇到带冒号的标题 例如“秘书揭密一段历史:1958年军委扩大会议真相” 会提示出错 而且没有正确修改文件 应该如何解决呢?
作者: qq381234916    时间: 2009-3-17 09:02

还是没看懂。~~看来还得加倍努力啊
作者: Batcher    时间: 2009-3-17 09:20     标题: 回复 10楼 的帖子

你把@echo off删掉,看看是哪里出错了。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2