Board logo

标题: 求助:如何用ping到的ip替换到文本中的指定位置? [打印本页]

作者: yaogunbasana     时间: 2008-9-30 23:29    标题: 求助:如何用ping到的ip替换到文本中的指定位置?

如:现有文本a.txt:注:
1  1
0  0  192.168.1.5  1000
0  1  192.168.1.5  3001
0  2  192.168.1.5  3002
0  3  192.168.1.5  3003
0  4  192.168.1.5  3004
0  5  192.168.1.5  3005
0  6  192.168.1.5  3006
0  7  192.168.1.5  3007
0  8  192.168.1.5  3008
0  9  192.168.1.5  3009
0  10 192.168.1.5  3010
0  11 192.168.1.5  3011
0  12 192.168.1.5  3012
0  13 192.168.1.5  3013
0  14 192.168.1.5  3014
0  15 192.168.1.5  3015
0  16 192.168.1.5  3016
0  17 192.168.1.5  3017
0  18 192.168.1.5  3018
0  19 192.168.1.5  3019
0  20 192.168.1.5  3020
0  21 192.168.1.5  3021
0  22 192.168.1.5  3022
0  23 192.168.1.5  3023
0  24 192.168.1.5  3024
0  25 192.168.1.5  3025
0  26 192.168.1.5  3026
0  27 192.168.1.5  3027
0  28 192.168.1.5  3028
0  29 192.168.1.5  3029
0  30 192.168.1.5  3030
0  31 192.168.1.5  3031
0  32 192.168.1.5  3032
0  33 192.168.1.5  3033
0  34 192.168.1.5  3034
0  35 192.168.1.5  3035
0  36 192.168.1.5  3036
0  37 192.168.1.5  3037
0  38 192.168.1.5  3038
0  39 192.168.1.5  3039
0  40 192.168.1.5  3040
0  41 192.168.1.5  3041
0  42 192.168.1.5  3042
0  43 192.168.1.5  3043
0  44 192.168.1.5  3044
0  45 192.168.1.5  3045
0  46 192.168.1.5  3046
0  47 192.168.1.5  3047
0  48 192.168.1.5  3048
0  49 192.168.1.5  3049
0  50 192.168.1.5  3050
0  51 192.168.1.5  5001
0  52 192.168.1.5  5052
0  53 192.168.1.5  5053

      现在通过ping lehuam.gicp.net ---这个网址是动态ip网址来的,所以ip是变化的,现在通过ping  lehuam.gicp.net  得出这个动态ip地址,把他替换到上面文本里面的ip地址位置
      由于192。168。1。5这个ip地址位置是动态ip经常变化的,所以用指定替换字符应该不行吧,应该用指定位置替换的吧!
      为了这个学习了很多bat命令,还是不懂怎么写!希望高手大虾来帮我写个,最好说明下,让偶学习下!谢谢了!
作者: zqz0012005     时间: 2008-10-1 00:28

@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "delims=" %%a in (a.txt) do (
    set "line=%%a"
    call echo "%%line:192.168.1.5=%ip%%%">>b.txt
)

作者: yaogunbasana     时间: 2008-10-1 18:33


  Quote:
Originally posted by zqz0012005 at 2008-10-1 00:28:
[code]@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "delims=" %%a in (a.txt) do (
    set &quo ...

运行后变为:
"1  1"
"0  0  59.33.117.66  1000"
"0  1  59.33.117.66  3001"
"0  2  59.33.117.66  3002"
"0  3  59.33.117.66  3003"
"0  4  59.33.117.66  3004"
"0  5  59.33.117.66  3005"
"0  6  59.33.117.66  3006"
"0  7  59.33.117.66  3007"
"0  8  59.33.117.66  3008"
"0  9  59.33.117.66  3009"
"0  10 59.33.117.66  3010"
"0  11 59.33.117.66  3011"
"0  12 59.33.117.66  3012"
"0  13 59.33.117.66  3013"
"0  14 59.33.117.66  3014"
"0  15 59.33.117.66  3015"
"0  16 59.33.117.66  3016"
"0  17 59.33.117.66  3017"
"0  18 59.33.117.66  3018"
"0  19 59.33.117.66  3019"
"0  20 59.33.117.66  3020"
"0  21 59.33.117.66  3021"
"0  22 59.33.117.66  3022"
"0  23 59.33.117.66  3023"


怎么会有双引号呢?还有大哥,我现在是想ping一次后,把ip直接替代为a文本中那个ip位置呢,也就是说那个位置是字符是变化的,这样怎么写?继续帮忙啊,大虾们!
作者: zqz0012005     时间: 2008-10-1 19:07    标题: Re 3楼

去掉代码中最后一句里面的引号。(疏忽,习惯了写引号)
@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do echo %%a %%b %ip% %%c>>b.txt

作者: yaogunbasana     时间: 2008-10-1 19:29
谢谢大哥的帮助,不过还有问题,能不能把结果替代到a里面的ip位置呢?现在写进
a文本后,是增加了数字不是代替的结果呢!
作者: yaogunbasana     时间: 2008-10-1 19:30
能解析一下语句的说明作用效果呢,想学习一下如何用
作者: yaogunbasana     时间: 2008-10-1 19:42
晕,第一行的1 1  那个给删没有了哦,不行 啊
作者: hackate     时间: 2008-10-1 20:04
@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do (
if not "%%c"=="" (
echo %%a %%b %ip% %%c>>b.txt
) else (
echo %%a %%b
)
)

呵呵,做个修改不就好了.
作者: yaogunbasana     时间: 2008-10-1 20:31
- -或许你们不明白我的意思啊,我 的意思是把更新到的ip直接替换到a文本的那个ip位置啊
作者: hackate     时间: 2008-10-1 21:14
那你的意思是不是不摇生成另一个文件.直接替换A.TXT里面的,就是不要生成B.TXT这样是吗?
作者: yaogunbasana     时间: 2008-10-1 21:43
en
作者: hackate     时间: 2008-10-1 21:53
@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do (
if not "%%c"=="" (
echo %%a %%b %ip% %%c>>b.txt
) else (
echo %%a %%b
)
)
del a.txt
ren b.txt a.txt

这样删除a.txt文件,然后把b.txt进行改名a.txt
呵呵..只能这样做了。批处理不借助三方软件只能如此
作者: yaogunbasana     时间: 2008-10-1 22:13
能不能用set那个命令?
作者: yaogunbasana     时间: 2008-10-1 22:15
@echo off
for /f "tokens=2 delims=[]" %%a in ('ping lehuam.gicp.net') do set ip=%%a
for /f "skip=1 tokens=3" %%b in (a.txt) do set ap=%%b
for /f "delims=" %%c in (a.txt) do (
    set "line=%%c"
    call echo %%line:%ap%=%ip%%%>>b.txt
)
del a.txt
ren b.txt a.txt
作者: hackate     时间: 2008-10-1 22:21
一样的。你用set str的替换也一样的,你必须还是要写入文件的,呵呵,没用
作者: hackate     时间: 2008-10-1 22:27
按你上面那样的代码是过于麻烦啦.呵呵,多个FOR会比较慢的,按我提供的代码就可以
作者: yaogunbasana     时间: 2008-10-1 22:31
『第 4 楼』:  Re 3楼

去掉代码中最后一句里面的引号。(疏忽,习惯了写引号)
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do echo %%a %%b %ip% %%c>>b.txt



这个语句比较简单,不过就是首行的1 1    那段也加上skiip1也不能做到,到底这个如何修改呢?
作者: yaogunbasana     时间: 2008-10-1 22:36


  Quote:
Originally posted by hackate at 2008-10-1 21:53:
@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do (
if not " ...

你的还是把第一行的1 1     那个删了呢?我要的是只改ip位置那段字符啊
作者: yaogunbasana     时间: 2008-10-1 22:46
呵呵,原来是b.txt位置写错了!
应该这样写:
@echo off
for /f "tokens=2 delims=[]" %%a in ('ping lehuam.gicp.net') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do (
if not "%%c"=="" (echo %%a %%b %ip% %%c) else (echo %%a %%b))>>b.txt
del a.txt
ren b.txt a.txt
这个应该比较清晰了吧!
谢谢大虾们了,累死了!
作者: BC     时间: 2008-10-2 08:42
可爱的lz
作者: Evangel     时间: 2008-10-3 16:13


  Quote:
Originally posted by hackate at 2008-10-1 09:53 PM:
@echo off
for /f "tokens=3 delims=: " %%a in ('ping -n 1 lehuam.gicp.net ^| find /i "Reply" ') do set ip=%%a
for /f "tokens=1,2,4" %%a in (a.txt) do (
if not " ...

佩服的要死....