Board logo

标题: [文本处理] 请详细讲解一下去除重复行的批处理含义 [打印本页]

作者: suseek    时间: 2011-6-22 20:26     标题: 请详细讲解一下去除重复行的批处理含义

@echo off

(for /f "delims=" %%a in (1.txt) do (

   if not defined "%%a" echo %%a&set ""%%a"=a"

))>new.txt
作者: batman    时间: 2011-6-22 20:32

楼主可参考此贴:
http://www.bathome.net/viewthrea ... p;highlight=defined

ps:当代码不止一行时请用code标签将代码括起来方便别人复制。。。
作者: suseek    时间: 2011-6-22 21:31

%%a不是在FOR循环读文本第一行时就被赋值了?为什么还说没定义呢,我实在不懂,请详细点
作者: tmplinshi    时间: 2011-6-22 21:59

本帖最后由 tmplinshi 于 2011-6-22 22:07 编辑

%%a 是用来引用所循环的行。

if not defined "%%a" echo %%a&set ""%%a"=a"
假设文本有以下几行:
测试
测试 1
测试
测试 2

执行过程为:
    如果没有定义"测试",则显示测试,并设置"测试"的值为 a
    如果没有定义"测试 1",则显示测试 1,并设置"测试 1"的值为 a
    如果没有定义"测试",则显示测试,并设置"测试"的值为 a。("测试"已经定义过,所以不显示这一行)
    如果没有定义"测试 2",则显示测试 2,并设置"测试 2"的值为 a
作者: applba    时间: 2011-6-22 22:28

这个里面有一个思维转弯,最好自己慢慢想,别人说了也没有用。
作者: Hello123World    时间: 2011-6-23 09:55

关键是这一句:
if not defined "%%a" echo %%a&set ""%%a"=a"
::如果不存在变量"%%a"就echo %%a,并且定义一个变量名为"%%a",变量值为a的变量。
::这两句一结合,重复行就变成变量名,然后就不会再次echo %%a,达到了去除重复行的目的。




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