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

[文本处理] 批处理怎样在包含某字符串的行将指定数值运算后进行替换?

[复制链接]
发表于 2022-1-6 12:55:39 | 显示全部楼层 |阅读模式
如下面例子,1个文件里有多行这样的文本,这只是其中1行,要把包含$CC32字符的行中的$BB0和$HH之间的数字减去600,然后替换掉原来的数字。
$K$AAZYGG1105  $WA    $F011   $F051   $F071   $F111   $ID00003301000101      $DD0$SS01$P01183320      $P05183320      $P07183320      $P11183320      $P13            $P15            $P17            $CC32$CF14     $BB074400$HH204700$WW000$V1000000
完成后是下面这样的:
$K$AAZYGG1105  $WA    $F011   $F051   $F071   $F111   $ID00003301000101      $DD0$SS01$P01183320      $P05183320      $P07183320      $P11183320      $P13            $P15            $P17            $CC32$CF14     $BB073800$HH204700$WW000$V1000000
请各位大佬们、老师们帮忙,马上要临近春节了,祝各位身体健康!工作顺利!在新的一年里事业蒸蒸日上,财运亨通,心想事成!
发表于 2022-1-6 13:59:20 | 显示全部楼层
  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath "%~0" -ReadCount 0 | Out-String ))) "
  5. pause
  6. exit /b
  7. #>
  8. $evaluator = [System.Text.RegularExpressions.MatchEvaluator] {
  9.   param([System.Text.RegularExpressions.Match]$m)
  10.   ([long]$m.Value - 600).ToString()
  11. }
  12. $re = [regex]'(?i)(?<=\$BB0)\d+(?=\$HH)'
  13. Get-ChildItem -Path .\*.txt | ForEach-Object {
  14.   if (-not $_.psiscontainer) {
  15.     $lines = [System.IO.File]::ReadAllLines($_.FullName)
  16.     for ($i = 0; $i -lt $lines.Count; $i++) {
  17.       if ($lines[$i] -match '\$CC32') {
  18.         $lines[$i] = $re.Replace($lines[$i], $evaluator)
  19.       }
  20.     }
  21.     [System.IO.File]::WriteAllLines($_.FullName,$lines)
  22.   }
  23. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 13:55 , Processed in 0.015438 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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