标题: [文本处理] BAT如何将当前本地连接IP地址输出替换.ini文件的某一行? [打印本页]
作者: 花开花落 时间: 2013-9-13 10:12 标题: BAT如何将当前本地连接IP地址输出替换.ini文件的某一行?
请教各位高手,如何将.ini文件中“HOST=”后面的“192.168.1.6”,替换为“HOST=我当前机器本地连接的IP地址”
[Hosts]
Host=192.168.1.6
Standby=192.168.1.7
作者: DAIC 时间: 2013-9-13 10:22
你的静态IP地址是什么?花多少钱买的?
作者: 花开花落 时间: 2013-9-13 10:27
本帖最后由 花开花落 于 2013-9-13 10:37 编辑
回复 2# DAIC
就是我机器当前的IP地址,IPV4的那个
作者: DAIC 时间: 2013-9-13 10:38
回复 3# 花开花落
Win7系统吗?
把 ipconfig /all 的结果贴出来看看
作者: 花开花落 时间: 2013-9-13 10:50
回复 4# DAIC
我是要用在XP系统上的,Win7也可以的话最好
作者: DAIC 时间: 2013-9-13 12:56
回复 5# 花开花落
请看4楼第2行
作者: 花开花落 时间: 2013-9-13 17:19
本帖最后由 花开花落 于 2013-9-13 17:22 编辑
Windows IP Configuration
Host Name . . . . . . . . . . . . : IHGIV-07231520
Primary Dns Suffix . . . . . . . : test.com
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : test.com
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : NVIDIA nForce 10/100 Mbps Ethernet
Physical Address. . . . . . . . . : 00-1F-D0-DE-CB-F9
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.1.202
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
DNS Servers . . . . . . . . . . . : 192.168.1.1
PPP adapter Aventail VPN Connection:
Connection-specific DNS Suffix . : test.com
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 2.0.50.230
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 202.106.0.20
8.8.8.8
这个是XP的,我只想去本地连接的IP地址:192.168.1.202 ,其它的都不要
作者: batman 时间: 2013-9-13 18:58
本帖最后由 batman 于 2013-9-13 19:05 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('ipconfig /all') do (
- set "str=%%a"
- if defined flag if "!str:IP Address=!" neq "!str!" set "ip=!str:*:=!"&goto next
- if "!str:本地连接=!" neq "!str!" set "flag=a"
- )
- :next
- (for /f "delims=" %%a in (a.ini) do (
- set "str=%%a"
- if "!str:~,5!" equ "Host=" (
- echo,Host=%ip:~1%
- ) else (
- echo,%%a
- )
- ))>$
- move $ a.ini&start a.ini
复制代码
作者: 花开花落 时间: 2013-9-15 00:08
本帖最后由 花开花落 于 2013-9-15 00:24 编辑
回复 8# batman
好强!学习了~~~不过文件中的空行都没有了,下面是文件内容,如果我想保留空行要怎么写呢?另外如果我想把“addr=192.168.1.6”这一行也一起改了,要怎么写?- [directory]
- datadir=d:\trace\data
- backdir=d:\trace\back
-
- [system]
- oilgunno=088
- StationID=
- SaleNo=
-
- [ICPreSell]
- addr=192.168.1.6
- port=1235
-
- [Hosts]
- Host=192.168.1.6
- Standby=192.168.1.7
复制代码
作者: 花开花落 时间: 2013-9-15 00:10
回复 9# 花开花落
我改了这个地方,结果每行前面都输出了一个行号,还是不对,求指点
(for /f "delims=" %%a in ('findstr /n .* a.ini')
作者: weichenxiehou 时间: 2013-9-15 10:16
回复 10# 花开花落
改一下batman的代码就是这样咯:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('ipconfig /all') do (
- set "str=%%a"
- if defined flag if "!str:IP Address=!" neq "!str!" set "ip=!str:*:=!"&goto next
- if "!str:本地连接=!" neq "!str!" set "flag=a"
- )
- :next
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.ini') do (
- set "str=%%b"
- if /i "!str:~,5!"=="Host=" set "str=Host=%ip%"
- if /i "!str:~,5!"=="addr=" set "str=addr=%ip%"
- echo,!str!
- ))>$
- move /y $ a.ini&start a.ini
复制代码
不过,呵呵,获取IP地址和修改ini文件,我还是倾向于使用现成的函数,如au3里两行代码即可:- IniWrite("a.ini","ICPreSell","addr",@IPAddress1)
- IniWrite("a.ini","Hosts","Host",@IPAddress1)
复制代码
作者: 花开花落 时间: 2013-9-15 19:00
回复 11# weichenxiehou
恩,OK了,不过最后这部分还是要这样写Host=%ip:~1%",不然前面会多一个空格,呵呵,非常感谢,学习了!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |