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

[文本处理] 【已解决】求助批处理根据A文本的对应关系,替换b文本内容

本帖最后由 wgx1688 于 2024-11-11 15:14 编辑

比如A文本里面有
aa,c1
ba,c2
如何查找b文本的aa替换成c1,ba替换成c2
1

评分人数

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

本帖最后由 qixiaobin0715 于 2024-11-8 09:05 编辑

回复 11# wgx1688
10楼输出MAC的代码有误,已修改。结果正确只是意外,碰巧而已。

TOP

回复 10# qixiaobin0715
感谢你这个没问题!上面的替换会出现值不对的情况

TOP

本帖最后由 qixiaobin0715 于 2024-11-8 09:08 编辑

替换:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims=," %%i in (a.txt) do set _%%i=%%j
  4. for /f "tokens=1* delims=_" %%i in (b.txt) do (
  5.     if "%%j"=="" (set str=%%i) else set "str=%%i_%%j"
  6.     for /f "tokens=2 delims== " %%k in ("%%j") do (
  7.         for %%l in (!_%%k!) do set str=!str:%%k=%%l!
  8.     )
  9.     echo,!str!
  10. )
  11. pause
复制代码
顺序输出MAC的值:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=_" %%i in (b.txt) do (
  4.     for /f "tokens=2,4 delims== " %%j in ("%%i") do (
  5.         for /f "tokens=1-4 delims=." %%a in ("%%j") do (
  6.             set a1=00%%a
  7.             set a2=00%%b
  8.             set a3=00%%c
  9.             set a4=00%%d
  10.             set _!a1:~-3!!a2:~-3!!a3:~-3!!a4:~-3!=%%k
  11.         )
  12.     )
  13. )
  14. for /f "tokens=2 delims==" %%i in ('set _^|sort /r') do echo,%%i
  15. pause
复制代码
1

评分人数

TOP

回复 4# flashercs
替换的时候会发现出现超过255以上的数字?不知道怎么会事,ip的最后一位

TOP

回复 7# aloha20200628
谢谢!!

TOP

本帖最后由 aloha20200628 于 2024-11-7 11:20 编辑

回复 3# wgx1688

用 对应表.csv 中的数据逐行替换源文件 1.txt,生成结果文件 1.new.txt,批处代码如下
  1. @echo off &(for /f "delims=" %%a in (1.txt) do (
  2.    set "s=%%a" &setlocal enabledelayedexpansion
  3.    for /f "tokens=1-2 delims=," %%x in (对应表.csv) do set "s=!s:%%~x=%%~y!"
  4.    echo,!s!&endlocal))>1.new.txt
  5. pause&exit/b
复制代码
用 sed.exe 一次完成全文件替换,并直接修改源文件 1.txt,效率高于以上的纯P版本(处理大数据尤其明显)

可从本坛第三方下载 sed.exe(落地即用) http://bcn.bathome.net/s/tool/index.html?key=sed 批处代码如下
  1. @echo off &for /f "tokens=1-2 delims=," %%x in (对应表.csv) do sed -i "s/%%~x/%%~y/g" 1.txt
  2. pause&exit/b
复制代码

TOP

本帖最后由 浅暮丶千殇 于 2024-11-7 03:08 编辑

回复 3# wgx1688
  1. @echo off
  2. set "_str=id=4 enabled=yes interface=lan1 ip_addr=192.168.9.73 mac=00:4b:24:27:00:be cl_name=-- comment= gateway= dns1= dns2="
  3. set "_str1=192.168.9.73"
  4. set "_str2=10.88.88.1"
  5. set str=%_str:%_str1%=%_str2%%
复制代码
这是用来替换的,_str 根据需要用for 循环获取然后可以进行批量替换

TOP

回复 4# flashercs
杠杠的,哎自己毫无头绪,准备用excel搞了, 谢谢

TOP

  1. @echo off
  2. set "a=a.txt"
  3. set "b=b.txt"
  4. powershell -c "$s=[io.file]::readAllText($env:b);foreach($l in [io.file]::readAllLines($env:a)){$k,$v=$l -split ',';$s=$s.Replace($k,$v);}[io.file]::writeAllText($env:b,$s);"
复制代码
微信:flashercs
QQ:49908356

TOP

本帖最后由 wgx1688 于 2024-11-7 00:23 编辑

回复 2# Batcher
要替换的文本是这样的


id=3 enabled=yes interface=lan1 ip_addr=192.168.9.73 mac=00:3b:24:27:00:bb cl_name=-- comment= gateway= dns1= dns2=
id=4 enabled=yes interface=lan1 ip_addr=192.168.9.124 mac=00:4b:24:27:00:be cl_name=-- comment= gateway= dns1= dns2=
id=5 enabled=yes interface=lan1 ip_addr=192.168.9.59 mac=00:2b:24:27:00:ad cl_name=-- comment= gateway= dns1= dns2=
id=6 enabled=yes interface=lan1 ip_addr=192.168.9.21 mac=00:3b:24:27:00:b6 cl_name=-- comment= gateway= dns1= dns2=
id=7 enabled=yes interface=lan1 ip_addr=192.168.9.79 mac=00:3b:24:27:00:b5 cl_name=-- comment= gateway= dns1= dns2=
然后我想做个对应表比如
192.168.9.73,10.88.88.1
192.168.9.124,10.88.88.2
就是按照下面的IP替换上面文本里面的IP,用查找替换太麻烦了
也就是会变成
id=3 enabled=yes interface=lan1 ip_addr=10.88.88.1 mac=00:3b:24:27:00:bb cl_name=-- comment= gateway= dns1= dns2=
id=4 enabled=yes interface=lan1 ip_addr=10.88.88.2 mac=00:4b:24:27:00:be cl_name=-- comment= gateway= dns1= dns2=
或者能不能按照ip顺序提取出MAC的值输出到文本
192.168.9.73
192.168.9.59
192.168.9.21
按照这个顺序输出MAC的值

TOP

回复 1# wgx1688


请给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
如果需要上传文件,请用使用网盘。

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

TOP

返回列表