|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『楼 主』:
为啥第二次筛选重复行没结果 (高手请进)
为啥第二次筛选重复行没结果?
@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 ]
|
|
2007-10-13 12:50 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
2 楼』:
Quote: | 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:
@echo off
cd.>good.txt
for /f "delims=, tokens=1,*" %%a in (test.txt) do (
type good.txt|find "%%b"||echo %%a,%%b>>good.txt
)
pause 不好意思,刚才没有看明白你的意思.
这个呢,是把有重复ip的删除了.
[ Last edited by scriptor on 2007-10-13 at 01:09 PM ]
|
|
2007-10-13 12:57 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
3 楼』:
Quote: | 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 ... |
|
第一次筛选后,就是没有重复的了
那么进行第二次删除重复行,肯定是没有结果的啊?
你的意思是什么呢?
|
|
2007-10-13 13:10 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
4 楼』:
我要对不重复的IP地址做2次操作。又不想生成临时文件, 第一次的结果因该已经被释放了呀 !
|
|
2007-10-13 13:17 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
5 楼』:
不太明白!
你想要的结果是什么样子的呢?
:ps
发现你两次check的代码是一样的
|
|
2007-10-13 13:32 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
6 楼』:
我没把其余代码贴上来,原理就是这个。
过滤不重复的IP,做操作一。做完后,再过滤一次做操作二。
|
|
2007-10-13 13:38 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
7 楼』:
我知道了:
第一次check的时候
你发现么? 代码里有一个if not defined %%j set %%j=x .....
当进行第二次时,set的内容没有清空
所以运行时候,第二个if not defined %%j ..... 就起作用了,
使得后面不能判断,运行.
改一下代码:
...
set %%j=
echo 2nd check
...... 运行结果是如下:
1st check
server 1 61.172.201.11
server 2 61.172.201.12
server 3 60.28.178.138
----------
2nd check
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
|
|
2007-10-13 13:39 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
|
2007-10-13 13:39 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
9 楼』:
多谢帮忙啊!
下面是我想要的,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
|
|
2007-10-13 13:43 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
10 楼』:
o,这个啊
看来我理解错了
我再想想!
:)
|
|
2007-10-13 13:50 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
11 楼』:
Quote: | Originally posted by scriptor at 2007-10-13 13:50:
o,这个啊
看来我理解错了
我再想想!
:) |
|
haha...我终于解决了:
原因是变量没有释放,没有置NULL.
用setlocal和endlocal 改变变量局域
@echo off
echo 1st check
setlocal
for /f "tokens=1,2 delims=," %%i in (test.txt) do (
if not defined %%j set %%j=x & echo %%i %%j)
echo ----------
echo 2nd check
endlocal
for /f "tokens=1,2 delims=," %%i in (test.txt) do (
if not defined %%j set %%j=x & echo %%i %%j)
pause
|
|
2007-10-13 13:56 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
12 楼』:
Quote: | Originally posted by scriptor at 2007-10-13 13:56:
haha...我终于解决了:
原因是变量没有释放,没有置NULL.
用setlocal和endlocal 改变变量局域
[code]
@echo off
echo 1st check
setlocal
for /f "tokens=1,2 delim ... |
|
关于变量为什么没有释放的验证
去掉上面的那个endlocal,输出就不对.
看一看看endlocal的help
Quote: | 结束批处理文件中环境改动的本地化操作。在执行ENDLOCAL 之后
所做的环境改动不再仅限于批处理文件。批处理文件结束后,
原先的设置无法还原。
ENDLOCAL
如果命令扩展名被启用,ENDLOCAL 会如下改变:
如果相应的 SETLOCAL 用新的 ENABLEEXTENSIONS 或
DISABLEEXTENSIONS 选项启用或停用了命令扩展名,那么,在
ENDLOCAL 之后,命令扩展名的启用/停用状态会还原到执行
相应的 SETLOCAL 命令前的状态。 |
|
|
|
2007-10-13 13:59 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
13 楼』:
当然,那还和setlocal有关
但是我认为,变量没有清空.不知道这个到底该怎么验证!
|
|
2007-10-13 14:00 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
14 楼』:
高手! 多谢啊 ~
但是,我把第二段的变量名都改了也试过,也是不来的。
但ENDLOCAL 的确解决了问题。
[ Last edited by uiopuiop on 2007-10-13 at 02:04 PM ]
|
|
2007-10-13 14:02 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
15 楼』:
hoho....... 有点意思
我有知道一个解决方案了
你的这个删除重复行,让我也长见识了.
哈哈......
我很少来,来了就高一两个问题坐坐,
还满有收获的
哈哈........
|
|
2007-10-13 14:05 |
|