标题: [文本处理] 【已解决】批处理利用for /f 进行文本中IP地址替换的原理及方法 [打印本页]
作者: sniperhgy 时间: 2009-5-9 15:45 标题: 【已解决】批处理利用for /f 进行文本中IP地址替换的原理及方法
问题是这样的,我有一个文件,内容如下:- ; Kaillera server config file
- ; ServerName can be up to 64 characters long.
- ServerName=Sniperhgy's Server
-
- ; Location can be up to 64 characters long.
- Location=北京市网通
-
- ; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
- URL=
- MaxUsers=2
- Port=27888
-
- ; Set Public to 0 if you want to run the server on a private LAN
- Public=1
-
- ; Use this parameter if you want to manually specify your server's
- ; IP address or leave blank for automatic
- ; (ex: IP=154.253.21.56)
- IP=221.220.117.27
- ; Messages flood protection
- ; FloodMsgNb is the max. number of times a same message has to
- ; be received in FloodMsgTime seconds.
-
- FloodMsgNb=5
- FloodMsgTime=3
- ; Minimum ping restriction (in ms)
- ; 0=disabled
- MinPing=0
-
- ; Maximum connection setting restriction
- ; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
- MaxConnSet=0
-
- ; Message of the Day
- ; Note that you can stack "MotdLine" options
- ;MotdLine=Welcome to Adam's Server!
- ;MotdLine=Have Fun!
- ; AllowWebAccess (1=yes,0=no)
- AllowWebAccess=1
-
- ; End of Kaillera server config file
复制代码
然后我用ipconfig /all 得到本次上网的ip地址(ADSL,每次的都不一样)
我想用得到的ip地址对文件中的IP=xxx.xxx.xxx.xxx部分进行替换,想到了用For,但是原理及
方法都不知道,麻烦知道的朋友讲解一下,对了,文件中的空行不能被
削掉,麻烦各位论坛的战友了
[ 本帖最后由 sniperhgy 于 2009-5-9 22:07 编辑 ]
作者: wxcute 时间: 2009-5-9 17:01
只要换IP这一行的话,可以创建两个文件:HEAD.TXT、TIRE.TXT,
HEAD.TXT内容为IP行之上的所有文本,TIRE.TXT为IP行之下所有内容。
找出IP后,
type HEAD.TXT>IP.INI
echo ip=xxx.xxx.xxx.xxx>>IP.INI
type TIRE.TXT>>IP.INI
[ 本帖最后由 wxcute 于 2009-5-9 17:02 编辑 ]
作者: sniperhgy 时间: 2009-5-9 18:45
回2楼版主的话,首先谢谢版主的回应,但是,这样做,我也想过,不过,就失去了我发这个求助贴的意义了,想学习一下用批处理来进行文本的替换,关键还是想知道原理啊
作者: Batcher 时间: 2009-5-9 19:31 标题: 回复 3楼 的帖子
没有哪个程序可以实现直接替换的,都是通过临时文件。
作者: netbenton 时间: 2009-5-9 19:43
第一个for取得ip到变量var
第二个for遍历文本a.txt 发现为ip=的行则显示 IP=!var:~1!
findstr /n .* a.txt 加了/n参数,是在串前面加了“行号:”,防止了空行的丢失。- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=:" %%a in ('ipconfig /all') do (
- if "%%a" equ "IP Address. . . . . . . . . . . ." set var=%%b
- )
-
- (for /f "tokens=1,* delims=:" %%a in ('findstr /n .* a.txt') do (
- set str=%%b
- if "!str:~1,3!" equ "IP=" (echo IP=!var:~1!!) else (echo %%b)
- ))>b.txt
复制代码
[ 本帖最后由 netbenton 于 2009-5-9 19:44 编辑 ]
作者: 随风 时间: 2009-5-9 20:00 标题: 回复 5楼 的帖子
echo %%b 应该改为 echo.%%b
作者: xlw542350190 时间: 2009-5-9 21:10
!str:~1,3! 这句能解释一下吗?难道!号能替代%号吗??
作者: Batcher 时间: 2009-5-9 21:19 标题: 回复 7楼 的帖子
批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/viewthread.php?tid=2899
作者: sniperhgy 时间: 2009-5-9 21:29
谢谢大家的回答,我去看看,理解一下的说
试了一下5楼朋友的代码,结果如下:
- ; Kaillera server config file
- ECHO 处于关闭状态。
- ; ServerName can be up to 64 characters long.
- ServerName=Sniperhgy's Server
- ; Location can be up to 64 characters long.
- Location=北京市网通
- ; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
- URL=
- ECHO 处于关闭状态。
- MaxUsers=2
- Port=27888
- ECHO 处于关闭状态。
- ; Set Public to 0 if you want to run the server on a private LAN
- Public=1
- ECHO 处于关闭状态。
- ; Use this parameter if you want to manually specify your server's
- ; IP address or leave blank for automatic
- ; (ex: IP=154.253.21.56)
- IP=221.220.117.27
- ECHO 处于关闭状态。
- ; Messages flood protection
- ; FloodMsgNb is the max. number of times a same message has to
- ; be received in FloodMsgTime seconds.
- FloodMsgNb=5
- FloodMsgTime=3
- ECHO 处于关闭状态。
- ; Minimum ping restriction (in ms)
- ; 0=disabled
- MinPing=0
- ECHO 处于关闭状态。
- ; Maximum connection setting restriction
- ; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
- MaxConnSet=0
- ECHO 处于关闭状态。
- ; Message of the Day
- ; Note that you can stack "MotdLine" options
- ;MotdLine=Welcome to Adam's Server
- ;MotdLine=Have Fun
- ECHO 处于关闭状态。
- ; AllowWebAccess (1=yes,0=no)
- AllowWebAccess=1
- ECHO 处于关闭状态。
- ; End of Kaillera server config file
复制代码
所有的空行,都变成了【ECHO 处于关闭状态。】
请问,这样要如何解决呢?
[ 本帖最后由 sniperhgy 于 2009-5-9 21:44 编辑 ]
作者: Batcher 时间: 2009-5-9 21:59 标题: 回复 9楼 的帖子
6楼不是给出答案了么?
作者: sniperhgy 时间: 2009-5-9 22:07
啊,原来echo.的作用是这个啊,谢谢了
作者: Batcher 时间: 2009-5-9 22:41 标题: 回复 11楼 的帖子
具体讲解请参考:
http://bbs.bathome.net/thread-939-1-1.html
作者: sniperhgy 时间: 2009-5-10 14:51
谢谢Batcher,我去学习一下
作者: Batcher 时间: 2009-5-10 15:40
终于找到问题了,是这句【if "%%a" equ "IP Adress. . . . . . . . "】,其实是因为前面还有一大堆空格,我试了一下LSS,也不行,难道只能用echo xx | find "xx"的形式吗?
可以先用set命令把空字符替换掉,然后再用if比较。
作者: sniperhgy 时间: 2009-5-10 16:03
哦,谢谢提示,我去试试看
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |