中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 03:00
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 为啥第二次筛选重复行没结果 (高手请进)
可打印版本  1,827 / 15
第1楼 uiopuiop 发表于 2007-10-13 12:50
中级用户 发帖 211 积分 400
为啥第二次筛选重复行没结果 (高手请进)
为啥第二次筛选重复行没结果?

@echo off
echo 1st check
for /F "tokens=1,2 delims=," %%i in (test.csv) do (
if not defined %%j set %%j=x & echo %%i %%j)
echo ----------
echo 2nd check
for /F "tokens=1,2 delims=," %%i in (test.csv) do (
if not defined %%j set %%j=x & echo %%i %%j)


test.csv 内容:
server 1,61.172.201.11
server 2,61.172.201.12
server 3,60.28.178.138
server 4,61.172.201.12
server 5,60.28.178.138
server 6,61.172.201.11
server 7,61.172.201.12
server 8,60.28.178.138

但只返回结果:
1st check
server 1 61.172.201.11
server 2 61.172.201.12
server 3 60.28.178.138
----------
2nd check
Exit code: 0 , 0000h

下面是我想要的,2次结果肯定是相同的。
只不过要要对这些IP 做2次不同的操作。(比如PING,试图连接服务器等。)

1st check
server 1 61.172.201.11
server 2 61.172.201.12
server 3 60.28.178.138
------------
2st check
server 1 61.172.201.11
server 2 61.172.201.12
server 3 60.28.178.138

[ Last edited by uiopuiop on 2007-10-13 at 01:54 PM ]
第2楼 scriptor 发表于 2007-10-13 12:57
银牌会员 发帖 555 积分 1,187
Originally posted by uiopuiop at 2007-10-13 12:50:
为啥第二次筛选重复行没结果?

@echo off
echo 1st check
for /F "tokens=1,2 delims=," %%i in (test.txt) do (
if not defined %%j set %%j=x & echo test 1: %%i)
e ...


给你一个我自己用的删除重复行bat:




不好意思,刚才没有看明白你的意思.
这个呢,是把有重复ip的删除了.

[ Last edited by scriptor on 2007-10-13 at 01:09 PM ]
第3楼 scriptor 发表于 2007-10-13 13:10
银牌会员 发帖 555 积分 1,187
Originally posted by uiopuiop at 2007-10-13 12:50:
为啥第二次筛选重复行没结果?

@echo off
echo 1st check
for /F "tokens=1,2 delims=," %%i in (test.csv) do (
if not defined %%j set %%j=x & echo %%i %%j)
echo ...



第一次筛选后,就是没有重复的了
那么进行第二次删除重复行,肯定是没有结果的啊?

你的意思是什么呢?
第4楼 uiopuiop 发表于 2007-10-13 13:17
中级用户 发帖 211 积分 400
我要对不重复的IP地址做2次操作。又不想生成临时文件, 第一次的结果因该已经被释放了呀 !
第5楼 scriptor 发表于 2007-10-13 13:32
银牌会员 发帖 555 积分 1,187
不太明白!

你想要的结果是什么样子的呢?

:ps
发现你两次check的代码是一样的
第6楼 uiopuiop 发表于 2007-10-13 13:38
中级用户 发帖 211 积分 400
我没把其余代码贴上来,原理就是这个。

过滤不重复的IP,做操作一。做完后,再过滤一次做操作二。
第7楼 scriptor 发表于 2007-10-13 13:39
银牌会员 发帖 555 积分 1,187
我知道了:

第一次check的时候
你发现么? 代码里有一个if not defined %%j set %%j=x .....
当进行第二次时,set的内容没有清空
所以运行时候,第二个if not defined %%j ..... 就起作用了,
使得后面不能判断,运行.

改一下代码:


运行结果是如下:
第8楼 scriptor 发表于 2007-10-13 13:39
银牌会员 发帖 555 积分 1,187
这个是不是你要的呢?
第9楼 uiopuiop 发表于 2007-10-13 13:43
中级用户 发帖 211 积分 400
多谢帮忙啊!
下面是我想要的,2次结果肯定是相同的。
只不过要要对这些IP 做2次不同的操作。(比如PING,试图连接服务器等。)

1st check
server 1 61.172.201.11
server 2 61.172.201.12
server 3 60.28.178.138
------------
2st check
server 1 61.172.201.11
server 2 61.172.201.12
server 3 60.28.178.138
第10楼 scriptor 发表于 2007-10-13 13:50
银牌会员 发帖 555 积分 1,187
o,这个啊
看来我理解错了
我再想想!
:)
第11楼 scriptor 发表于 2007-10-13 13:56
银牌会员 发帖 555 积分 1,187
Originally posted by scriptor at 2007-10-13 13:50:
o,这个啊
看来我理解错了
我再想想!
:)



haha...我终于解决了:
原因是变量没有释放,没有置NULL.
用setlocal和endlocal 改变变量局域

第12楼 scriptor 发表于 2007-10-13 13:59
银牌会员 发帖 555 积分 1,187
Originally posted by scriptor at 2007-10-13 13:56:



haha...我终于解决了:
原因是变量没有释放,没有置NULL.
用setlocal和endlocal 改变变量局域

第13楼 scriptor 发表于 2007-10-13 14:00
银牌会员 发帖 555 积分 1,187
当然,那还和setlocal有关

但是我认为,变量没有清空.不知道这个到底该怎么验证!
第14楼 uiopuiop 发表于 2007-10-13 14:02
中级用户 发帖 211 积分 400
高手! 多谢啊 ~

但是,我把第二段的变量名都改了也试过,也是不来的。

但ENDLOCAL 的确解决了问题。

[ Last edited by uiopuiop on 2007-10-13 at 02:04 PM ]
第15楼 scriptor 发表于 2007-10-13 14:05
银牌会员 发帖 555 积分 1,187
hoho....... 有点意思
我有知道一个解决方案了

你的这个删除重复行,让我也长见识了.
哈哈......

我很少来,来了就高一两个问题坐坐,
还满有收获的
哈哈........
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023