[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理利用for /f 进行文本中IP地址替换的原理及方法

问题是这样的,我有一个文件,内容如下:
  1. ; Kaillera server config file
  2. ; ServerName can be up to 64 characters long.
  3. ServerName=Sniperhgy's Server
  4. ; Location can be up to 64 characters long.
  5. Location=北京市网通
  6. ; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
  7. URL=
  8. MaxUsers=2
  9. Port=27888
  10. ; Set Public to 0 if you want to run the server on a private LAN
  11. Public=1
  12. ; Use this parameter if you want to manually specify your server's
  13. ; IP address or leave blank for automatic
  14. ; (ex: IP=154.253.21.56)
  15. IP=221.220.117.27
  16. ; Messages flood protection
  17. ; FloodMsgNb is the max. number of times a same message has to
  18. ; be received in FloodMsgTime seconds.
  19. FloodMsgNb=5
  20. FloodMsgTime=3
  21. ; Minimum ping restriction (in ms)
  22. ; 0=disabled
  23. MinPing=0
  24. ; Maximum connection setting restriction
  25. ; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
  26. MaxConnSet=0
  27. ; Message of the Day
  28. ; Note that you can stack "MotdLine" options
  29. ;MotdLine=Welcome to Adam's Server!
  30. ;MotdLine=Have Fun!
  31. ; AllowWebAccess (1=yes,0=no)
  32. AllowWebAccess=1
  33. ; End of Kaillera server config file
复制代码
然后我用ipconfig /all 得到本次上网的ip地址(ADSL,每次的都不一样)
我想用得到的ip地址对文件中的IP=xxx.xxx.xxx.xxx部分进行替换,想到了用For,但是原理及
方法都不知道,麻烦知道的朋友讲解一下,对了,文件中的空行不能被
削掉,麻烦各位论坛的战友了

[ 本帖最后由 sniperhgy 于 2009-5-9 22:07 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

只要换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 编辑 ]
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

回2楼版主的话,首先谢谢版主的回应,但是,这样做,我也想过,不过,就失去了我发这个求助贴的意义了,想学习一下用批处理来进行文本的替换,关键还是想知道原理啊

TOP

回复 3楼 的帖子

没有哪个程序可以实现直接替换的,都是通过临时文件。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

第一个for取得ip到变量var
第二个for遍历文本a.txt 发现为ip=的行则显示 IP=!var:~1!
findstr /n .* a.txt     加了/n参数,是在串前面加了“行号:”,防止了空行的丢失。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=:" %%a in ('ipconfig /all') do (
  3.         if "%%a" equ "IP Address. . . . . . . . . . . ." set var=%%b
  4. )
  5. (for /f "tokens=1,* delims=:" %%a in ('findstr /n .* a.txt') do (
  6.         set str=%%b
  7.         if "!str:~1,3!" equ "IP=" (echo IP=!var:~1!!) else (echo %%b)
  8. ))>b.txt
复制代码

[ 本帖最后由 netbenton 于 2009-5-9 19:44 编辑 ]

TOP

回复 5楼 的帖子

echo %%b 应该改为 echo.%%b
技术问题请到论坛发帖求助!

TOP

!str:~1,3! 这句能解释一下吗?难道!号能替代%号吗??

TOP

回复 7楼 的帖子

批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/viewthread.php?tid=2899
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢大家的回答,我去看看,理解一下的说

试了一下5楼朋友的代码,结果如下:
  1. ; Kaillera server config file
  2. ECHO 处于关闭状态。
  3. ; ServerName can be up to 64 characters long.
  4. ServerName=Sniperhgy's Server
  5. ; Location can be up to 64 characters long.
  6. Location=北京市网通
  7. ; URL can be up to 128 characters long. (ex: http://www.mysite.com/)
  8. URL=
  9. ECHO 处于关闭状态。
  10. MaxUsers=2
  11. Port=27888
  12. ECHO 处于关闭状态。
  13. ; Set Public to 0 if you want to run the server on a private LAN
  14. Public=1
  15. ECHO 处于关闭状态。
  16. ; Use this parameter if you want to manually specify your server's
  17. ; IP address or leave blank for automatic
  18. ; (ex: IP=154.253.21.56)
  19. IP=221.220.117.27
  20. ECHO 处于关闭状态。
  21. ; Messages flood protection
  22. ; FloodMsgNb is the max. number of times a same message has to
  23. ; be received in FloodMsgTime seconds.
  24. FloodMsgNb=5
  25. FloodMsgTime=3
  26. ECHO 处于关闭状态。
  27. ; Minimum ping restriction (in ms)
  28. ; 0=disabled
  29. MinPing=0
  30. ECHO 处于关闭状态。
  31. ; Maximum connection setting restriction
  32. ; 0=disabled, 1=Bad, 2=Low, 3=Average, 4=Good, 5=Excellant, 6=LAN
  33. MaxConnSet=0
  34. ECHO 处于关闭状态。
  35. ; Message of the Day
  36. ; Note that you can stack "MotdLine" options
  37. ;MotdLine=Welcome to Adam's Server
  38. ;MotdLine=Have Fun
  39. ECHO 处于关闭状态。
  40. ; AllowWebAccess (1=yes,0=no)
  41. AllowWebAccess=1
  42. ECHO 处于关闭状态。
  43. ; End of Kaillera server config file
复制代码

所有的空行,都变成了【ECHO 处于关闭状态。】
请问,这样要如何解决呢?

[ 本帖最后由 sniperhgy 于 2009-5-9 21:44 编辑 ]

TOP

回复 9楼 的帖子

6楼不是给出答案了么?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

啊,原来echo.的作用是这个啊,谢谢了

TOP

回复 11楼 的帖子

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢Batcher,我去学习一下

TOP

终于找到问题了,是这句【if "%%a" equ "IP Adress. . . . . . . . "】,其实是因为前面还有一大堆空格,我试了一下LSS,也不行,难道只能用echo xx | find "xx"的形式吗?

可以先用set命令把空字符替换掉,然后再用if比较。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

哦,谢谢提示,我去试试看

TOP

返回列表