找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27738|回复: 5

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

[复制链接]
发表于 2011-6-22 20:26:12 | 显示全部楼层 |阅读模式
@echo off

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

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

))>new.txt

评分

参与人数 1PB -2 收起 理由
Batcher -2 请编辑自己的帖子,把代码放到code标签里面 ...

查看全部评分

发表于 2011-6-22 20:32:09 | 显示全部楼层
楼主可参考此贴:
http://www.bathome.net/viewthrea ... p;highlight=defined

ps:当代码不止一行时请用code标签将代码括起来方便别人复制。。。
 楼主| 发表于 2011-6-22 21:31:46 | 显示全部楼层
%%a不是在FOR循环读文本第一行时就被赋值了?为什么还说没定义呢,我实在不懂,请详细点
发表于 2011-6-22 21:59:43 | 显示全部楼层
本帖最后由 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
发表于 2011-6-22 22:28:22 | 显示全部楼层
这个里面有一个思维转弯,最好自己慢慢想,别人说了也没有用。
发表于 2011-6-23 09:55:27 | 显示全部楼层
关键是这一句:
if not defined "%%a" echo %%a&set ""%%a"=a"
::如果不存在变量"%%a"就echo %%a,并且定义一个变量名为"%%a",变量值为a的变量。
::这两句一结合,重复行就变成变量名,然后就不会再次echo %%a,达到了去除重复行的目的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:09 , Processed in 0.016106 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表