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

[文本处理] BAT如何读取替换处理文本内容?

INCREMENT LND 31.0 permanent uncounted \
        8C14C865032BC586B17B VENDOR_STRING="VSVER=2.0 \
        LO=(0,3,6,7,9,10,14,16,17,19,21,22, \
        23,24,25,26,29,30,31,32,34,35,36,37,40,41,45,47,48,51,52,53, \
        222,223,224,225,226,227,228,229,230,235,236,237,238,239,240,241,242,243,244,245,246,247, \
        248,249,250,251,253,254,255,256,257,259,260,261,262,263,264,265,266,267,268,269,270,271, \
        272,273,274,275,276,277,278,279,280,281,282,283)" \
        HOSTID=HOSTID=00-00-00-00-00-00 SUPERSEDE \
        vendor_info="VIVER=2.0 EXTERNAL_NAME=" ISSUER=LND \
        ISSUED=01-oct-2009 NOTICE=LND-7330757468@CS SN=5A4B3210 TS_OK \
        SIGN2=493953A2819A
INCREMENT 2DGS-OA_LND 31.0 permanent uncounted 6D73A8C36A75 \
        VENDOR_STRING="VSVER=2.0 LO=(19,169,170,171, \
        172,173,174,175,176,177,178,179,180,181,182,183,184,185,186)" \
        HOSTID=HOSTID=00-00-00-00-00-00 SUPERSEDE \
        vendor_info="VIVER=2.0 EXTERNAL_NAME=" ISSUER=MAGNiTUDE \
        ISSUED=01-oct-2009 NOTICE=LND-7330757468@CS SN=5A4B3210 TS_OK \

--------------------以上是文本内容------------------

1.鉴于篇幅,故文本未全部贴出来,只复制了前面一部分,但是后面的格式和以上类似.
2.目的: 用 本机M A C 替换掉上述文本中全部的红色字体.

本帖最后由 Lumiere 于 2013-10-7 12:20 编辑

回复 1# mmud886
  1. @echo off
  2. for /f %%a in ('getmac /nh^|find /i "device"') do set phy_add=%%a
  3. (for /f "delims=" %%a in (1.txt) do (
  4. echo %%a|find /i "HOSTID=HOSTID=" 1>nul||echo %%a
  5. echo %%a|find /i "HOSTID=HOSTID=" 1>nul&&echo         HOSTID=HOSTID=%phy_add% SUPERSEDE \
  6. ))>$
  7. move $ 2.txt
  8. pause
复制代码
Still with wax

TOP

  1. @echo off
  2. for /f %%a in ('getmac^|findstr /i "^[0-9a-f]"') do set "mac=%%a"
  3. set "re=\([0-9a-fA-F]\{2\}\-\)\{5\}[0-9a-fA-F]\{2\}"
  4. sed "s/%re%/%mac%/g" a.txt>b.txt
  5. pause
复制代码
来个vbs:
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. text = fso.OpenTextFile("a.txt",1).ReadAll
  3. Set wmi = GetObject("winmgmts:\\.\root\cimv2")
  4. Set colSettings = wmi.InstancesOf("Win32_networkadapterconfiguration")
  5. For Each objSetting in colSettings
  6.     If objSetting.IpEnabled Then
  7.         Set re = New RegExp
  8.         re.Pattern = "([0-9a-f]{2}\-){5}[0-9a-f]{2}"
  9.         re.Global = True
  10.         re.ignoreCase = True
  11.         text = re.Replace(text,Replace(objSetting.MACAddress,":","-"))
  12.     End If
  13. Next
  14. fso.OpenTextFile("b.txt",2,True).Write text
复制代码

TOP

本帖最后由 mmud886 于 2013-10-5 12:53 编辑

回复 2# Lumiere

首先非常感谢 Lumiere 大大的回复.我进行了测试,发现没有对文本进行替换,而是增加了两行.
效果如下:
272,273,274,275,276,277,278,279,280,281,282,283)" \
        HOSTID=HOSTID=00-00-00-00-00-00 SUPERSEDE \
        HOSTID=HOSTID=00-00-00-00-00-00 SUPERSEDE \
        HOSTID=HOSTID=XX-XX-XX-XX-XX-XX SUPERSEDE \

1.这段代码确实读出了:本机 M A C XX-XX-XX-XX-XX-XX.
2.但是没有对红色部分进行替换,而是额外地增加了紫色的两行.

两位大大如果方便,给我发个私信或者加我QQ2573365303我传源文件.

TOP

回复 3# apang

首先非常感谢 apang  大大的回复.我也对以上两段代码进行了测试,结果如下:
1.bat中含有sed,需要打补丁.
2.打上sed补丁后,可以按照要求替换规定位置文本,但是读取的M A C不是本机活动网卡(估计是多网卡缘故?).
例如:HOSTID=PTC_HOSTID=XX-XX-XX-XX-XX-XX SUPERSEDE \
XX-XX-XX-XX-XX-XX .不是本机活动网卡地址.
3.VBS测试完美执行.

TOP

回复 5# mmud886
  1. @echo off
  2. set "wmic=wmic NicConfig where "IpEnabled='True'" get MACAddress"
  3. for /f %%a in ('%wmic%^|find ":"') do set "mac=%%a"
  4. set "re=\([0-9a-fA-F]\{2\}\-\)\{5\}[0-9a-fA-F]\{2\}"
  5. sed "s/%re%/%mac::=-%/g" a.txt>b.txt
  6. pause
复制代码

TOP

回复 6# apang

经过测试已经能达到目的了,谢谢 apang  大大...

TOP

回复 4# mmud886


    不好意思,代码没经过认真测试就发出来了,现在已经在2楼编辑修改过,也测试过了。不过apang给出的代码应该更有效率。
Still with wax

TOP

返回列表