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

[文本处理] 批处理如何删除文本的重复行?

大家好!
今天看了下面一段代码,用来删除文本中重复的行,其中“if not ... ”那一句话不是很理解,请求高手帮忙解释一下,谢谢。

@echo off :: 删除重复的行,但不能保留空行 :: 对不符合变量命名规则、变量个数超过限制的文本都无法正确处理 :: (echo 清除重复行后的文件内容:& echo.)>str_.txt for /f "delims=" %%i in (test.txt) do ( if not defined %%i set %%i=A & echo %%i>>str_.txt) start str_.txt

  1. @echo off
  2. (for /f "delims=" %%i in (test.txt) do if not defined %%i set %%i=A&echo %%i)>str_.txt
复制代码
if not defined %%i ...
如果没有定义变量%%i,则...
当没有重复内容时,执行set %%i=A(定义变量)和echo %%i(输出内容)
当重复时,因为%%i被定义,所以set %%i=A和echo %%i不被执行。
参考语法 if [not] defined variable command [else expression]
也可以写成
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (test.txt) do if not "!%%i!"=="A" set %%i=A&echo %%i)>str_.txt
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-21 11:03 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

非常感谢!

TOP

原帖由 hanyeguxing 于 2010-5-18 12:58 发表
@echo off
(for /f "delims=" %%i in (test.txt) do (if not defined %%i set %%i=A&echo %%i)>str_.txtif not defined %%i ...
如果没有定义变量%%i,则...
当没有重复内容时,执行set %%i=A(定义变量)和echo  ...


高手能不能解释一下.为什么在%%i没有赋值的时候等于A呢

TOP

原帖由 小波子 于 2010-5-21 10:13 发表


高手能不能解释一下.为什么在%%i没有赋值的时候等于A呢


1,将内容定义为变量时,也同时输出内容,即通过定义变量来标记这个内容出现过了。
2,那么当 if 检查变量是否被定义,就可以判断这个内容是否被定义过,也就是是否出现过。
3,if defined 检查的是变量名是否存在,至于值是什么不是他关心的。所以将内容定义为变量,变量的值只要是合法的就可以。

[ 本帖最后由 hanyeguxing 于 2010-5-21 11:09 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表