[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理过滤重复行指定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 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2
Still with wax

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

skip 不能等于 0

TOP

我已经调试过了,就是一个显示-此时不应有",很纳闷
Still with wax

TOP

回复 2楼 的帖子

对了,skip为什么不能等于0呢?
Still with wax

TOP

一年前有人贴过这样技巧:
http://www.bathome.net/viewthread.php?tid=1161#pid5472
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

呵呵,又是超版尼古拉斯凯奇大哥,我老佩服他了。他用了一个if条件判断,解决了一个for对付skip=0和不等于0两种情况,一个句式就搞定了,不错。学习学习……
Still with wax

TOP

回复 5楼 的帖子

还有个问题请教下管理员,为什么他第一段代码要用俩goto:eof呢,最后一个不用也不会影响代码的执行吧,是不是只是出于代码严谨性的考虑?
Still with wax

TOP

回复 7楼 的帖子

你可以试试把最后那个删掉,看看是否会出问题。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8楼 的帖子

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

TOP

返回列表