标题: [文本处理] 求助BAT批处理文本替换多个字符串 [打印本页]
作者: w1378533 时间: 2022-11-3 23:33 标题: 求助BAT批处理文本替换多个字符串
- chcp 65001
- @echo off
- setlocal enabledelayedexpansion
- md Newfiles
- for %%i in (*.txt) do (
- (for /f "delims=" %%a in ('type "%%i"') do (
- set "str=%%a"
- echo,!str:"AAA"="BBB"!
- ))>"Newfiles\%%i"
- )
- pause&exit
复制代码
这是一个大佬发的,但是我现在有多个需求,例如"AAA"="BBB"。"CCC=DDD"。"EEE=FFF"等等需要同时处理
作者: hfxiang 时间: 2022-11-4 07:45
在第8行后面插入- echo,!str:"CCC"="DDD"!
- echo,!str:"EEE"="FFF"!
复制代码
即可
作者: w1378533 时间: 2022-11-4 07:57
回复 2# hfxiang
大佬这种转换我试过,但是会出现多条重复问题!
"技能名字": "电脑-通用附加麻痹状态",
"技能名字": "电脑-通用附加麻痹状态",
"SkillName": "电脑-通用附加麻痹状态",
"Race": "电脑",
"技能职业": "电脑",
"技能职业": "电脑",
"技能类型": "子类技能",
"SkillType": "子类技能",
"技能类型": "子类技能",
"计算触发概率": 1.0,
"计算触发概率": 1.0,
"计算触发概率": 1.0,
作者: hfxiang 时间: 2022-11-4 08:10
你把所有修改前及修改后的对应关系摆出来,大家才会知道你的真实需求
作者: w1378533 时间: 2022-11-4 08:23
回复 4# hfxiang
修改前的:
"技能名字": "电脑-通用附加麻痹状态",
"技能职业": "电脑",
"技能类型": "子类技能",
"计算触发概率": 1.0,
"需要消耗魔法": [],
修改后的:
"SkillName": "电脑-通用附加麻痹状态",
"Race": "电脑",
"SkillType": "子类技能",
"CalculateTriggerProbability": 1.0,
"NeedConsumeMagic": [],
作者: zhanglei1371 时间: 2022-11-4 08:48
这种感觉还是用高级语言做成窗体更好吧
作者: qixiaobin0715 时间: 2022-11-4 09:02
由于楼主未提供文本样本,只能这样了,不一定准确。
假设要修改的地方是在各行的行首,不能位于中间和后面,且行首不能存在任何空白字符。
以下代码是根据1楼的代码修改而来:- @echo off
- chcp 65001
- set _"技能名字"="SkillName"
- set _"技能职业"="Race"
- set _"技能类型"="SkillType"
- set _"计算触发概率"="CalculateTriggerProbability"
- set _"需要消耗魔法"="NeedConsumeMagic"
- setlocal enabledelayedexpansion
- for %%i in (*.txt) do (
- (for /f "tokens=1* delims=:" %%a in ('type "%%i"') do (
- if defined _%%a (
- echo,!_%%a!:%%b
- ) else (
- if not "%%b"=="" (echo,%%a:%%b) else echo,%%a
- )
- ))>"Newfiles\%%i"
- )
- pause&exit
复制代码
作者: hfxiang 时间: 2022-11-4 09:14
如果不做颠覆性改动,在楼主原有的脚本基础上做修改,脚本可以如下- chcp 65001
- @echo off
- setlocal enabledelayedexpansion
- md Newfiles
- for %%i in (*.txt) do (
- (for /f "delims=" %%a in ('type "%%i"') do (
- set "str=%%a"
- set out_id=1
- set "str_o=!str:"技能名字"="SkillName"!"
- if not !str_o!==!str! set out_id=0 & echo;!str_o!
- set "str_o=!str:"技能职业"="Race"!"
- if not !str_o!==!str! set out_id=0 & echo;!str_o!
- set "str_o=!str:"技能类型"="SkillType"!"
- if not !str_o!==!str! set out_id=0 & echo;!str_o!
- set "str_o=!str:"计算触发概率"="CalculateTriggerProbability"!"
- if not !str_o!==!str! set out_id=0 & echo;!str_o!
- set "str_o=!str:"需要消耗魔法"="NeedConsumeMagic"!"
- if not !str_o!==!str! set out_id=0 & echo;!str_o!
- if !out_id!==1 echo;!str!
- ))>"Newfiles\%%i"
- )
- pause&exit
复制代码
作者: hfxiang 时间: 2022-11-4 09:57
如果使用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),
把- 技能名字 SkillName
- 技能职业 Race
- 技能类型 SkillType
- 计算触发概率 CalculateTriggerProbability
- 需要消耗魔法 NeedConsumeMagic
复制代码
以ANSI格式保存为map.txt
则可以如下脚本处置:- chcp 65001
- @echo off
- setlocal enabledelayedexpansion
- md Newfiles
- for %%i in (*.txt) do (
- 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"
- )
- pause&exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |