Powershell 如果满足条件,则替换单词

Powershell 如果满足条件,则替换单词,powershell,Powershell,如果名为“Total”的列中的所有值都与所附文件中的值一样为99.95,我想将附件第5行第27至30列中的“XRF”替换为“CALC” $InFolder=“C:\sif\” $OutFolder=“C:\Edited\” $files=Get ChildItem$InFolder-Recurse-Include*.sif foreach($files中的文件){ $OutFile=$OutFolder+$file.BaseName+“\u FeC.sif” $OutFile $Lines=获

如果名为“Total”的列中的所有值都与所附文件中的值一样为99.95,我想将附件第5行第27至30列中的“XRF”替换为“CALC”

$InFolder=“C:\sif\”
$OutFolder=“C:\Edited\”
$files=Get ChildItem$InFolder-Recurse-Include*.sif
foreach($files中的文件){
$OutFile=$OutFolder+$file.BaseName+“\u FeC.sif”
$OutFile
$Lines=获取内容$file
$Fe_C=“Y”
foreach($行中的行){
而($Fe_C-ne“N”){
如果($Line.ReadCount-ge 8){
如果(($line.Split(“”)-eq“99.95”){
$Fe_C=“Y”
}否则{
$Fe_C=“N”
}
}
}
}
}

您需要检查数据列15中是否没有任何数据行的值不是99.95,如果是,请将第5行中第一次出现的“XRF”替换为“CALC”

要做到这一点,请替换此:

$Lines = Get-Content $file
$Fe_C = "Y"
foreach ($Line in $Lines) {
  ...
}
为此:

$Lines = Get-Content $file
$different = [bool]($Lines |
             Select-Object -Skip 7 |
             Where-Object { $_ } |
             Where-Object { ($_ -split '\s+')[15] -ne '99.95' })
if (-not $different) {
  $Lines[4] = $Lines[4] -replace 'XRF (.*)', 'CALC$1'
}
Set-Content -Path $file -Value $Lines

使用正则表达式并假设Total列是最后一列:

if (($lines[7..($lines.count-1)] -notmatch '\s99\.95\s*$|^\s*$').count -eq 0) {
    $lines[4] = ([regex]'XRF').replace($lines[4], 'CALC', 1)
}

请将代码和数据作为文本而不是imagesOkay发布,您尝试了什么?此问题目前只是要求我们为您编写代码,StackOverflow不是代码编写资源。抱歉。这是我的剧本。它在最后一列检查99.95时停止。我不知道如何使用split获取最后一列。$InFolder=“C:\sif\”$OutFolder=“C:\Edited\”$files=get ChildItem$InFolder-recurse-Include*.sif foreach($files in$files){$OutFile=$OutFolder+$file.BaseName+“\FeC.sif”$OutFile$Line=获取内容$file$Fe_C=“Y”foreach($Line in$Line){($Fe_C-ne“N”){if($Line.ReadCount-ge 8){if($Line.Split(“”)-eq“99.95”){$Fe_C=“Y”}否则{$Fe_C=“N”}}}由于我无法发布我的整个脚本,我只是将脚本停止的部分剪切。任何建议都将不胜感激。致意。感谢Ansgar和wOxxOm。这两种解决方案都符合我的预期。我已经学会使用bool和CALC。致意。Maw