中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-10 11:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 帮忙解释删除重复行代码的意思? 查看 769 回复 8
楼 主 帮忙解释删除重复行代码的意思? 发表于 2008-11-09 01:29 ·  中国 福建 福州 电信
初级用户
积分 35
发帖 22
注册 2008-10-11 01:13
17年会员
UID 128044
性别 男
状态 离线
源代码:
--------------------------------------------------------------------
@echo off
:: 删除重复的行,但不能保留空行
:: 对不符合变量命名规则、变量个数超过限制的文本都无法正确处理
:: code by youxi01 modified by jm 2006-10-31
(echo 清除重复行后的文件内容:& echo.)>str_.txt
for /f "delims=" %%i in (test.txt) do (
if not defined %%i set %%i=A & echo %%i>>str_.txt)
-------------------------------------------------------------------

我一直理解不了最后一句“if not defined %%i set %%i=A & echo %%i>>str_.txt”的意思,哪位帮忙解释一下?
2 发表于 2008-11-09 01:48 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
这样能否理解?
if not defined %%i (
set %%i=A
echo %%i>>str_.txt
)
3 还是不明白意思? 发表于 2008-11-09 02:29 ·  中国 福建 福州 电信
初级用户
积分 35
发帖 22
注册 2008-10-11 01:13
17年会员
UID 128044
性别 男
状态 离线
defined应该是定义的意思吧
没有设延迟变量,为什么还要设set %%i=A
设set %%i=A有什么用意?
4 发表于 2008-11-09 02:48 ·  中国 山东 滨州 联通
初级用户
积分 20
发帖 17
注册 2008-08-08 04:42
18年会员
UID 122948
性别 男
状态 离线
defined 就是用它来判断重复行的 但
set %%i=A 什么意思??请楼主明讲
谢谢
5 发表于 2008-11-09 02:51 ·  中国 广东 揭阳 电信
初级用户
积分 97
发帖 49
注册 2008-09-24 03:17
17年会员
UID 126450
性别 男
状态 离线
没有开延迟变量
6 回4楼 发表于 2008-11-09 02:58 ·  中国 福建 福州 电信
初级用户
积分 35
发帖 22
注册 2008-10-11 01:13
17年会员
UID 128044
性别 男
状态 离线
是别人的源码,我也不知道set %%i=A 什么意思??
7 发表于 2008-11-09 05:35 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
set var=A你知道什么意思,为何set %%i=A就不知道了?、、、
只不过这里的var改成用%%i代替而已。。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
8 发表于 2008-11-09 05:55 ·  中国 山东 滨州 联通
初级用户
积分 20
发帖 17
注册 2008-08-08 04:42
18年会员
UID 122948
性别 男
状态 离线
恩 谢谢解释 明白了 但是 这样什么作用?
9 发表于 2008-11-09 06:17 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
某个文件中的内容如下:

var1
var1
var2
var2

会循环4次,因为有4行(for是按行来读取的)。
第一次循环set %%i=a,执行的是set var1=a,并把%%i的值var1打印出来。第二次循环,%%i的值还是var1,var1在第一次时已经被定义过了,所以此次什么也不输出。往下的流程同是。。。
你把顶楼的代码的@echo off去掉,在CMD中运行,仔细观察其过程就能明白了。。。
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
论坛跳转: