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

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

  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"等等需要同时处理

在第8行后面插入
  1.         echo,!str:"CCC"="DDD"!
  2.         echo,!str:"EEE"="FFF"!
复制代码
即可

TOP

回复 2# hfxiang


大佬这种转换我试过,但是会出现多条重复问题!
  "技能名字": "电脑-通用附加麻痹状态",
  "技能名字": "电脑-通用附加麻痹状态",
  "SkillName": "电脑-通用附加麻痹状态",
  "Race": "电脑",
  "技能职业": "电脑",
  "技能职业": "电脑",
  "技能类型": "子类技能",
  "SkillType": "子类技能",
  "技能类型": "子类技能",
  "计算触发概率": 1.0,
  "计算触发概率": 1.0,
  "计算触发概率": 1.0,

TOP

你把所有修改前及修改后的对应关系摆出来,大家才会知道你的真实需求

TOP

回复 4# hfxiang
修改前的:
  "技能名字": "电脑-通用附加麻痹状态",
  "技能职业": "电脑",
  "技能类型": "子类技能",
  "计算触发概率": 1.0,
  "需要消耗魔法": [],
修改后的:
  "SkillName": "电脑-通用附加麻痹状态",
  "Race": "电脑",
  "SkillType": "子类技能",
  "CalculateTriggerProbability": 1.0,
  "NeedConsumeMagic": [],

TOP

这种感觉还是用高级语言做成窗体更好吧

TOP

由于楼主未提供文本样本,只能这样了,不一定准确。
假设要修改的地方是在各行的行首,不能位于中间和后面,且行首不能存在任何空白字符。
以下代码是根据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

评分人数

TOP

如果不做颠覆性改动,在楼主原有的脚本基础上做修改,脚本可以如下
  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

评分人数

TOP

如果使用第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

评分人数

    • w1378533: 8L解决了我的问题,感谢你技术 + 1

TOP

返回列表