![]() |
中国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: 给你一个我自己用的删除重复行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: 第一次筛选后,就是没有重复的了 那么进行第二次删除重复行,肯定是没有结果的啊? 你的意思是什么呢? |
|
| 第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: haha...我终于解决了: 原因是变量没有释放,没有置NULL. 用setlocal和endlocal 改变变量局域 |
|
| 第12楼 scriptor | 发表于 2007-10-13 13:59 |
| 银牌会员 发帖 555 积分 1,187 | |
Originally posted by scriptor at 2007-10-13 13:56: |
|
| 第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 |