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

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

如下面例子,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
请各位大佬们、老师们帮忙,马上要临近春节了,祝各位身体健康!工作顺利!在新的一年里事业蒸蒸日上,财运亨通,心想事成!

  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. }
复制代码
微信:flashercs
QQ:49908356

TOP

返回列表