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