Board logo

标题: [文件操作] [已解决]批处理过滤重复行指定skip=0时提示不应有双引号 [打印本页]

作者: Lumiere    时间: 2009-7-14 09:13     标题: [已解决]批处理过滤重复行指定skip=0时提示不应有双引号

题目不太明确,昨天在论坛上看到一个新手的过滤文本中重复行的提帖子,自己写了一个代码如下
  1. @echo off
  2. cd.>b.txt
  3. set /a n=0
  4. :omit
  5. for /f "skip=%n%" %%a in (a.txt) do (
  6.     setlocal enabledelayedexpansion
  7.     set /a n+=1
  8.     for /f %%b in (b.txt) do if "%%b"=="%%a" goto omit
  9.     echo %%a>>b.txt
  10. )
  11. pause
复制代码
但是运行结果只提示“此时不应有"”,一直没弄明白为什么会这样,后经tireless兄指点,for /f结果中skip不能等于0,故将代码稍作修改,如下,单独处理第一行然后直接跳出for循环,接着处理第二行以后的文本。
  1. @echo off
  2. cd.>b.txt
  3. set /a n=1
  4. for /f %%a in (a.txt) do echo %%a>b.txt&&goto omit
  5. :omit
  6. for /f "skip=%n%" %%a in (a.txt) do (
  7.     setlocal enabledelayedexpansion
  8.     set /a n+=1
  9.     for /f %%b in (b.txt) do if "%%b"=="%%a" goto omit
  10.     echo %%a>>b.txt
  11. )
  12. pause
复制代码
只是不明白为什么微软不能允许将skip=0作为从文本第一行开始处理的一个显式制定,要不这样的话就能简化不少代码了。还希望达人们多讨论,再给小弟讲解下。

[ 本帖最后由 Lumiere 于 2009-7-15 13:43 编辑 ]
作者: tireless    时间: 2009-7-14 09:20

把 @echo off 去掉,在命令提示符窗口中运行该批处理,看代码运行到哪停止了...

skip 不能等于 0
作者: Lumiere    时间: 2009-7-14 12:53

我已经调试过了,就是一个显示-此时不应有",很纳闷
作者: Lumiere    时间: 2009-7-14 13:00     标题: 回复 2楼 的帖子

对了,skip为什么不能等于0呢?
作者: Batcher    时间: 2009-7-14 15:55

一年前有人贴过这样技巧:
http://www.bathome.net/viewthread.php?tid=1161#pid5472
作者: Lumiere    时间: 2009-7-14 16:30     标题: 回复 5楼 的帖子

呵呵,又是超版尼古拉斯凯奇大哥,我老佩服他了。他用了一个if条件判断,解决了一个for对付skip=0和不等于0两种情况,一个句式就搞定了,不错。学习学习……
作者: Lumiere    时间: 2009-7-14 17:10     标题: 回复 5楼 的帖子

还有个问题请教下管理员,为什么他第一段代码要用俩goto:eof呢,最后一个不用也不会影响代码的执行吧,是不是只是出于代码严谨性的考虑?
作者: Batcher    时间: 2009-7-14 19:08     标题: 回复 7楼 的帖子

你可以试试把最后那个删掉,看看是否会出问题。
作者: Lumiere    时间: 2009-7-14 21:12     标题: 回复 8楼 的帖子

果然如我所料,删除以后运行结果一样,最后一个可有可无。




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