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

[文本处理] 【已解决】批处理怎样读取字符串替换另外一个TXT文本中对应的字符串?

[复制链接]
发表于 2024-11-6 09:04:01 | 显示全部楼层
4楼提的要求等于没说,我的本意是在网盘 上传真实的需要处理的文件,而不是随意杜撰一些文件。
 楼主| 发表于 2024-11-6 10:15:06 | 显示全部楼层
回复 15# qixiaobin0715


    字典中的X\Y分别对应原文中的数组变量
 楼主| 发表于 2024-11-6 10:16:24 | 显示全部楼层
回复 16# qixiaobin0715
附件中的结果就是真实的需要
发表于 2024-11-6 10:26:54 | 显示全部楼层
回复 17# TXTUSER
原文中的P1是怎么回事呢?
 楼主| 发表于 2024-11-6 11:22:19 | 显示全部楼层
本帖最后由 TXTUSER 于 2024-11-8 13:01 编辑

回复 19# qixiaobin0715
老师,我重新传了附件,
这次简化了一下
请帮助解决
发表于 2024-11-6 11:36:51 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-11-6 14:44 编辑

原来是股票啊,真搞不懂这些函数的关系。你这就不是单纯的替换了。
发表于 2024-11-6 18:53:40 | 显示全部楼层
本帖最后由 idwma 于 2024-11-6 19:02 编辑

原文有两行为什么结果只留一行
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $aaaa='字典.txt'
  3. $bbbb='原文.txt'
  4. $dddd='结果.txt'
  5. $eeee=gc $bbbb
  6. gc $aaaa|%{$cccc=$_ -split '=';$eeee=$eeee -replace $cccc[0],$cccc[1]}
  7. sc $dddd $eeee
复制代码
 楼主| 发表于 2024-11-7 10:33:44 | 显示全部楼层
回复 22# idwma
结果和原文一样的,没有替换成功
发表于 2024-11-7 10:59:50 | 显示全部楼层
20楼附件处理后 DLL1(17,SIGNALS_USER(4567,2),0,0)
17、0、0这3个数是如何得到的?
发表于 2024-11-7 11:02:41 | 显示全部楼层
回复 23# TXTUSER


    你举的例子和实际数据不一样,很难帮到你啊
发表于 2024-11-7 15:46:42 | 显示全部楼层
好像有点看明白了,多层嵌套式参数替换,使用批处理应当不适合,最好想想其它方法。
发表于 2024-11-7 15:50:08 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-11-7 15:52 编辑


楼主后来提供的示例文件和要求,与开始定义的原文/字典规则出现了冲突,并加入了函数表达式整体置换的要求,如此,原文不是纯粹的原文,字典不是纯粹的字典,而且依据变量替换的顺序或依据函数表达式整体替换的顺序会导出不同的结果
发表于 2024-11-8 08:57:21 | 显示全部楼层
本帖最后由 idwma 于 2024-11-8 09:06 编辑

最后一个链接失效了,只测了前面的
变量名随便输的,如果和文件里的有冲突还要改一下
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $aaaa='字典.txt'
  3. $bbbb='原文.txt'
  4. $dddd='结果.txt'
  5. gc $aaaa|?{$_ -match '='}|%{$cccc=$_ -split '=';iex('$'+$cccc[0]+'="'+$cccc[1]+'"')}
  6. $table=@{}
  7. gc $bbbb|?{$_ -match '='}|%{
  8.     $s=$_.trim()
  9.     while(
  10.         [regex]::matches($s,"\w+(?=(\((?:[^()]+|(?<Open>)\(|(?<-Open>)\))+(?(Open)(?!))\)))")|%{
  11.             $i=$_.groups[0].value+$_.groups[1].value
  12.             $table[$_.groups[0].value]=$_.groups[0].value+$_.groups[1].value
  13.             if($i -match '^\w+\([^)]+\)$'){
  14.                 $s=$s -replace [regex]::Escape($i),('$table["{0}"]' -f $_.groups[0].value)
  15.             }
  16.             1
  17.         }
  18.     ){}

  19.     while(
  20.         [regex]::matches($s,'\$\w+\["([^]]+)"\]')|%{
  21.             $g=iex "$_"
  22.             $i=iex('$'+$_.groups[1])
  23.             if($i -ne $null){
  24.                 $k=$g -split '[(,)]'
  25.                 $table['c']=1
  26.                 $j=[regex]::replace(
  27.                     $i,
  28.                     '(?<=[(,])[A-Z]\w*(?=[,)])',
  29.                     {$k[$table['c']++]}
  30.                 )
  31.                 $s=$s -replace [regex]::Escape("$_"),$j
  32.                 1
  33.             }else{
  34.                 $s=$s -replace [regex]::Escape("$_"),$g
  35.                 1
  36.             }
  37.         }
  38.     ){}

  39.     $cccc=$s -split '='
  40.     iex('$'+$cccc[0]+'="'+$cccc[1]+'"')

  41.     [regex]::replace(
  42.         $s,
  43.         '(?<=[(,])\w+(?=[,)])',
  44.         {
  45.             $a=$args[0].groups[0]
  46.             if(test-path('Variable:'+$a)){iex('$'+$a)}else{$a}
  47.         }
  48.     )
  49. }|sc $dddd
复制代码
 楼主| 发表于 2024-11-8 12:34:14 | 显示全部楼层
回复 26# qixiaobin0715


    写成dll也行,麻烦老师了
 楼主| 发表于 2024-11-8 12:58:03 | 显示全部楼层
回复 28# idwma

感谢老师支持,完美解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 16:06 , Processed in 0.012419 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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