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

[文本处理] 请详细讲解一下去除重复行的批处理含义

@echo off

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

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

))>new.txt
1

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2

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

ps:当代码不止一行时请用code标签将代码括起来方便别人复制。。。
***共同提高***

TOP

%%a不是在FOR循环读文本第一行时就被赋值了?为什么还说没定义呢,我实在不懂,请详细点

TOP

本帖最后由 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

TOP

这个里面有一个思维转弯,最好自己慢慢想,别人说了也没有用。

TOP

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

TOP

返回列表