找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18552|回复: 8

[文本处理] 求助BAT批处理文本替换多个字符串

[复制链接]
发表于 2022-11-3 23:33:57 | 显示全部楼层 |阅读模式
  1. chcp 65001
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. md Newfiles
  5. for %%i in (*.txt) do (
  6.     (for /f "delims=" %%a in ('type "%%i"') do (
  7.         set "str=%%a"
  8.         echo,!str:"AAA"="BBB"!
  9.     ))>"Newfiles\%%i"
  10. )
  11. pause&exit
复制代码
这是一个大佬发的,但是我现在有多个需求,例如"AAA"="BBB"。"CCC=DDD"。"EEE=FFF"等等需要同时处理
发表于 2022-11-4 07:45:53 | 显示全部楼层
在第8行后面插入

  1.         echo,!str:"CCC"="DDD"!
  2.         echo,!str:"EEE"="FFF"!
复制代码
即可
 楼主| 发表于 2022-11-4 07:57:58 | 显示全部楼层
回复 2# hfxiang


大佬这种转换我试过,但是会出现多条重复问题!
  "技能名字": "电脑-通用附加麻痹状态",
  "技能名字": "电脑-通用附加麻痹状态",
  "SkillName": "电脑-通用附加麻痹状态",
  "Race": "电脑",
  "技能职业": "电脑",
  "技能职业": "电脑",
  "技能类型": "子类技能",
  "SkillType": "子类技能",
  "技能类型": "子类技能",
  "计算触发概率": 1.0,
  "计算触发概率": 1.0,
  "计算触发概率": 1.0,
发表于 2022-11-4 08:10:34 | 显示全部楼层
你把所有修改前及修改后的对应关系摆出来,大家才会知道你的真实需求
 楼主| 发表于 2022-11-4 08:23:03 | 显示全部楼层
回复 4# hfxiang
修改前的:
  "技能名字": "电脑-通用附加麻痹状态",
  "技能职业": "电脑",
  "技能类型": "子类技能",
  "计算触发概率": 1.0,
  "需要消耗魔法": [],
修改后的:
  "SkillName": "电脑-通用附加麻痹状态",
  "Race": "电脑",
  "SkillType": "子类技能",
  "CalculateTriggerProbability": 1.0,
  "NeedConsumeMagic": [],
发表于 2022-11-4 08:48:30 | 显示全部楼层
这种感觉还是用高级语言做成窗体更好吧
发表于 2022-11-4 09:02:50 | 显示全部楼层
由于楼主未提供文本样本,只能这样了,不一定准确。
假设要修改的地方是在各行的行首,不能位于中间和后面,且行首不能存在任何空白字符。
以下代码是根据1楼的代码修改而来:
  1. @echo off
  2. chcp 65001
  3. set _"技能名字"="SkillName"
  4. set _"技能职业"="Race"
  5. set _"技能类型"="SkillType"
  6. set _"计算触发概率"="CalculateTriggerProbability"
  7. set _"需要消耗魔法"="NeedConsumeMagic"
  8. setlocal enabledelayedexpansion
  9. for %%i in (*.txt) do (
  10.     (for /f "tokens=1* delims=:" %%a in ('type "%%i"') do (
  11.         if defined _%%a (
  12.             echo,!_%%a!:%%b
  13.         ) else (
  14.             if not "%%b"=="" (echo,%%a:%%b) else echo,%%a
  15.         )
  16.     ))>"Newfiles\%%i"
  17. )
  18. pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
w1378533 + 1 感谢

查看全部评分

发表于 2022-11-4 09:14:19 | 显示全部楼层
如果不做颠覆性改动,在楼主原有的脚本基础上做修改,脚本可以如下

  1. chcp 65001
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. md Newfiles
  5. for %%i in (*.txt) do (
  6.         (for /f "delims=" %%a in ('type "%%i"') do (
  7.                 set "str=%%a"
  8.                 set out_id=1
  9.                 set "str_o=!str:"技能名字"="SkillName"!"
  10.                 if not !str_o!==!str! set out_id=0 & echo;!str_o!
  11.                 set "str_o=!str:"技能职业"="Race"!"
  12.                 if not !str_o!==!str! set out_id=0 & echo;!str_o!
  13.                 set "str_o=!str:"技能类型"="SkillType"!"
  14.                 if not !str_o!==!str! set out_id=0 & echo;!str_o!
  15.                 set "str_o=!str:"计算触发概率"="CalculateTriggerProbability"!"
  16.                 if not !str_o!==!str! set out_id=0 & echo;!str_o!
  17.                 set "str_o=!str:"需要消耗魔法"="NeedConsumeMagic"!"
  18.                 if not !str_o!==!str! set out_id=0 & echo;!str_o!
  19.                 if !out_id!==1 echo;!str!
  20.         ))>"Newfiles\%%i"
  21. )
  22. pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
w1378533 + 1 完美可用,谢谢

查看全部评分

发表于 2022-11-4 09:57:52 | 显示全部楼层
如果使用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),

  1. 技能名字        SkillName
  2. 技能职业        Race
  3. 技能类型        SkillType
  4. 计算触发概率        CalculateTriggerProbability
  5. 需要消耗魔法        NeedConsumeMagic
复制代码
以ANSI格式保存为map.txt

则可以如下脚本处置:

  1. chcp 65001
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. md Newfiles
  5. for %%i in (*.txt) do (
  6.         gawk "NR==FNR{a[NR]=$1;b[$1]=$2;N=NR;next}{for(i=1;i<=N;i++)if($0~a[i])$0=gensub(a[i],b[a[i]],"1")}1" map.txt "%%~i">"Newfiles\%%i"
  7. )
  8. pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
w1378533 + 1 8L解决了我的问题,感谢你

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 13:04 , Processed in 0.022590 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表