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

[文本处理] 文本批量替换字符的批处理求助

[复制链接]
发表于 2024-8-13 11:15:37 | 显示全部楼层 |阅读模式
各位大神好:
有一批文本内容格式如下;RCP格式可以记事本打开;判断文件名是否包含04T字符,不包含04T的文件将C0_E0后面的1,0,0或2,0,0替换为3,0,1
SMD-Product,C:\AV03-2322-1\Data\RecipeFile\ChmRcpData\R0001\AD IMPROVE-AB,1:C+W+M+C,1,1,0.7t,2023/07/24 18:02:37,C2,NotUse,C2,NotUse,LotClean,NotUse,Clean Cycle,NotUse,,C:\AV03-2322-1\Data\RecipeFile\PtnRcpData\S12100_P10_C0_E0,1,0,0,C:\AV03-2322-1\Data\RecipeFile\PtnRcpData\S12100_P02_C0_E0,2,0,0,S3 or S4,,
,,,,,,,,,,,,
发表于 2024-8-13 13:27:02 | 显示全部楼层
回复 1# haichuan5121


    找个真实的文件,把操作之前、操作之后的两份文件打包上传到网盘,我试试。
 楼主| 发表于 2024-8-13 14:58:39 | 显示全部楼层
回复 2# Batcher

内部局域网限制上传附件;文本全部内容就是下面字符RCP格式可以记事本打开,其中2,0,0也可能是1,0,0

SMD-Product,C:\A-B-1\Data\RecipeFile\ChmRcpData\R0001\AD IMPROVE-AB,1:C+W+M+C,1,1,0.7t,2023/07/24 18:02:37,C2,NotUse,C2,NotUse,LotClean,NotUse,Clean Cycle,NotUse,,C:\A-B-1\Data\RecipeFile\PtnRcpData\S12100_P10_C0_E0,2,0,0,C:\A-B-1\Data\RecipeFile\PtnRcpData\S12100_P02_C0_E0,2,0,0,S3 or S4,,
,,,,,,,,,,,,
变更后是
SMD-Product,C:\A-B-1\Data\RecipeFile\ChmRcpData\R0001\AD IMPROVE-AB,1:C+W+M+C,1,1,0.7t,2023/07/24 18:02:37,C2,NotUse,C2,NotUse,LotClean,NotUse,Clean Cycle,NotUse,,C:\A-B-1\Data\RecipeFile\PtnRcpData\S12100_P10_C0_E0,3,0,1,C:\A-B-1\Data\RecipeFile\PtnRcpData\S12100_P02_C0_E0,3,0,1,S3 or S4,,
,,,,,,,,,,,,
发表于 2024-8-13 15:48:37 | 显示全部楼层
没有测试文件,只能这样试试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.RCP^|findstr /v "04T"') do (
  4.     (for /f "delims=" %%j in ('type "%%i"') do (
  5.         set "str=%%j"
  6.         set "str=!str:C0_E0,1,0,0=C0_E0,3,0,1!"
  7.         set "str=!str:C0_E0,2,0,0=C0_E0,3,0,1!"
  8.         echo,!str!
  9.     ))>New-%%i
  10. )
  11. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
haichuan5121 + 1 及时热情+2

查看全部评分

 楼主| 发表于 2024-8-13 16:43:36 | 显示全部楼层
回复 4# qixiaobin0715

执行结果是这个  ;批处理过程覆盖源文件了

   
C:\Users\admin\Desktop\PI\SP01>(
set "str=SMD-Product,C:\SH03-9322-1\Data\RecipeFile\ChmRcpData\R0001\AD IMPROVE-AB,1:C+W+M+C,1,1,0.7t,2023/07/24 18:02:37,C2,NotUse,C2,NotUse,LotClean,NotUse,Clean Cycle,NotUse,,C:\SH03-9322-1\Data\RecipeFile\PtnRcpData\S12100_P10_C0_E0,1,0,0,C:\SH03-9322-1\Data\RecipeFile\PtnRcpData\S12100_P02_C0_E0,2,0,0,S3 or S4,,"  
set "str=!str:C0_E0,1,0,0=C0_E0,3,0,1!"  
set "str=!str:C0_E0,2,0,0=C0_E0,3,0,1!"  
echo,!str!
)
SMD-Product,C:\SH03-9322-1\Data\RecipeFile\ChmRcpData\R0001\AD IMPROVE-AB,1:C+W+M+C,1,1,0.7t,2023/07/24 18:02:37,C2,NotUse,C2,NotUse,LotClean,NotUse,Clean Cycle,NotUse,,C:\SH03-9322-1\Data\RecipeFile\PtnRcpData\S12100_P10_C0_E0,3,0,1,C:\SH03-9322-1\Data\RecipeFile\PtnRcpData\S12100_P02_C0_E0,3,0,1,S3 or S4,,

C:\Users\admin\Desktop\PI\SP01>(
set "str=,,,,,,,,,,,,"  
set "str=!str:C0_E0,1,0,0=C0_E0,3,0,1!"  
set "str=!str:C0_E0,2,0,0=C0_E0,3,0,1!"  
echo,!str!
)
,,,,,,,,,,,,
发表于 2024-8-13 17:03:02 | 显示全部楼层
1.复制代码内容时,请点击代码下面的“复制代码”,不要选中复制;
2.最好发一个测试文件上来。
如果还不行,我就放弃吧。
发表于 2024-8-13 17:44:19 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-8-15 13:52 编辑

回复 3# haichuan5121

以下批处代码仅处理当前目录下文件名未含 04T 的文本文件,假设其扩展名为 .rcp
其中包含 C0_E0,1,0,0 或者 C0_E0,2,0,0 的字段均被置换为  C0_E0,3,0,1
新文件名=源文件名.new.rcp

  1. @echo off &for /f "delims=" %%F in ('dir /b/a-d *rcp^|findstr /irvc:"04t" ') do (
  2.       powershell "(gc '%%F') -replace 'C0_E0,\d,0,0', 'C0_E0,3,0,1' ">"%%~nF.new%%~xF"
  3. )
  4. pause&exit/b
复制代码
再让ps代劳一步...

  1. @echo off & powershell "dir *.rcp -exclude '*04T*'|%%{((gc $_.name) -replace 'C0_E0,\d,0,0', 'C0_E0,3,0,1')|sc ($_.basename+'.new.rcp')}"
  2. pause&exit/b
复制代码
发表于 2024-8-13 19:13:57 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /a-d *.rcp ^|find /v "04T"') do (
  4.         (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  5.                 if "%%b" equ "" (
  6.                         echo=
  7.                 ) else (
  8.                         set str=%%b
  9.                         setlocal enabledelayedexpansion
  10.                         set str=!str:C0_E0,1,0,0=C0_E0,3,0,1!
  11.                         echo=!str:C0_E0,2,0,0=C0_E0,3,0,1!
  12.                         endlocal
  13.                 )
  14.         ))>"%%~ni_2%%~xi"
  15. )
  16. pause
复制代码
 楼主| 发表于 2024-8-14 14:32:12 | 显示全部楼层
回复 4# qixiaobin0715


    可以用了感谢感谢大神
发表于 2024-8-14 14:54:44 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-8-14 14:56 编辑

回复 9# haichuan5121
是漏掉了首行?@echo off
 楼主| 发表于 2024-8-14 15:23:04 | 显示全部楼层
回复 8# 77七


    可以可以 感谢!要把3,0,1变回1.0.0或2.0.0怎么写,能不能根据提示输入后执行;文档两个C0_E0后参数根据需求修改;
比如提示输入12 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为2.0.0
比如提示输入11 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为1.0.0
比如提示输入13 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为3.0.1
 楼主| 发表于 2024-8-14 15:26:14 | 显示全部楼层
本帖最后由 haichuan5121 于 2024-8-14 15:27 编辑

回复 10# qixiaobin0715


       对的我看执行过程把OFF 改成ON了  
感谢!要把3,0,1变回1.0.0或2.0.0怎么写,C0_E0后面只有这三个组合
能不能根据提示输入后执行;文档两个C0_E0后参数根据需求修改;
比如提示输入12 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为2.0.0
比如提示输入11 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为1.0.0
比如提示输入13 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为3.0.1
比如提示输入21 则内容  第一个3.0.1变更为2.0.0,第二个3.0.1变更为1.0.0
比如提示输入22 则内容  第一个3.0.1变更为2.0.0,第二个3.0.1变更为2.0.0
比如提示输入23 则内容  第一个3.0.1变更为1.0.0,第二个3.0.1变更为3.0.1
发表于 2024-8-14 16:37:00 | 显示全部楼层
回复 12# haichuan5121
替换需要一个字符作为锚点,此字符不能在文本的任何地方出现,这里选为“`”,如果文本中含有此字符,请自行更换:
  1. @echo off
  2. set /p n=Please Input No. :
  3. setlocal enabledelayedexpansion
  4. set x1=C0_E0,1.0.0
  5. set x2=C0_E0,2.0.0
  6. set x3=C0_E0,3.0.1
  7. for /l %%i in (1,1,3) do (
  8.     for /l %%j in (1,1,3) do (
  9.         set m=%%i%%j
  10.         if !n! equ !m! (
  11.             set a1=!x%%i!
  12.             set a2=!x%%j!
  13.         )
  14.     )
  15. )
  16. for /f "delims=" %%i in ('dir /b /a-d *.RCP^|findstr /v "04T"') do (
  17.     (for /f "delims=" %%j in ('type "%%i"') do (
  18.         set "str=%%j"
  19.         set "str=!str:C0_E0,3,0,1=`!"
  20.         if "!str!"=="%%j" (
  21.             echo,%%j
  22.         ) else (
  23.             for /f "tokens=1,2* delims=`" %%a in ("!str!") do (
  24.                 echo,%%a!a1!%%b!a2!%%c
  25.             )
  26.         )
  27.     ))>New-%%i
  28. )
  29. pause
复制代码
这里也是针对顶楼所说的“文件名中不包含04T文件”。
代码未经测试,请注意备份好源文件,以免出现意外。
发表于 2024-8-14 16:55:07 | 显示全部楼层
回复 12# haichuan5121
刚刚注意到,你前面的数字之间是逗号,后面是点号,写代码时我也没注意,前后不统一,请根据文本具体情况自行修改。3.0.1————3,0,1
发表于 2024-8-14 20:51:37 | 显示全部楼层
回复 11# haichuan5121


   这个和1楼的替换应该是一回事,就是替换 两段C0_E0后数字,可以写个通用脚本,用批处理有点麻烦,用其它脚本或第三方文本工具的正则应该好点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 21:07 , Processed in 0.022402 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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