标题: [文本处理] 批处理怎样在包含某字符串的行将指定数值运算后进行替换? [打印本页]
作者: levelintt 时间: 2022-1-6 12:55 标题: 批处理怎样在包含某字符串的行将指定数值运算后进行替换?
如下面例子,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
请各位大佬们、老师们帮忙,马上要临近春节了,祝各位身体健康!工作顺利!在新的一年里事业蒸蒸日上,财运亨通,心想事成!
作者: flashercs 时间: 2022-1-6 13:59
- <#*,:&cls
- @echo off
- cd /d "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- pause
- exit /b
- #>
- $evaluator = [System.Text.RegularExpressions.MatchEvaluator] {
- param([System.Text.RegularExpressions.Match]$m)
- ([long]$m.Value - 600).ToString()
- }
- $re = [regex]'(?i)(?<=\$BB0)\d+(?=\$HH)'
- Get-ChildItem -Path .\*.txt | ForEach-Object {
- if (-not $_.psiscontainer) {
- $lines = [System.IO.File]::ReadAllLines($_.FullName)
- for ($i = 0; $i -lt $lines.Count; $i++) {
- if ($lines[$i] -match '\$CC32') {
- $lines[$i] = $re.Replace($lines[$i], $evaluator)
- }
- }
- [System.IO.File]::WriteAllLines($_.FullName,$lines)
- }
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |