Powershell输出文件缺少输入文件中的行
为什么以下脚本生成的输出文件不包含原始文件中包含的所有行?我在一行一行地执行替换逻辑,但我并没有明确地删除任何行Powershell输出文件缺少输入文件中的行,powershell,powershell-2.0,Powershell,Powershell 2.0,为什么以下脚本生成的输出文件不包含原始文件中包含的所有行?我在一行一行地执行替换逻辑,但我并没有明确地删除任何行 [regex]$r = "\$\%\$@@(.+)\$\%\$@@"; (Get-Content $inputFile) | Foreach-Object { $line = $_; $find = $r.matches($line); if ($find[0].Success) { foreach
[regex]$r = "\$\%\$@@(.+)\$\%\$@@";
(Get-Content $inputFile) |
Foreach-Object {
$line = $_;
$find = $r.matches($line);
if ($find[0].Success) {
foreach ($match in $find) {
$found = $match.value
$replace = $found -replace "[^A-Za-z0-9\s]", "";
$line.Replace($found, $replace);
}
}
} |
Set-Content $outputFile
输入文件
输出文件
只有在管道找到匹配项时,才将内容输出到管道,如下所示:
$line.Replace($found, $replace)
如果未找到匹配项,则需要在不进行任何替换的情况下输出该行:
[regex]$r = "\$\%\$@@(.+)\$\%\$@@";
(Get-Content $inputFile) |
Foreach-Object {
$line = $_;
$find = $r.matches($line);
if ($find[0].Success) {
foreach ($match in $find) {
$found = $match.value
$replace = $found -replace "[^A-Za-z0-9\s]", "";
$line.Replace($found, $replace);
}
}
Else { $line }
} |
Set-Content $outputFile
如果($find[0].Success)为$false,该行会发生什么情况?如果条件为false,我不会对该行执行任何操作,所以我假设它将直接传输到输出文件。我想你应该质疑这个假设。同意-我不认为我完全理解Foreach循环中发生的事情。你在脚本块的开头将$分配给$行。此行:$line.Replace($found,$Replace)正在将替换的文本输出到管道,但它仅在存在匹配项时运行。如果没有匹配项,则不会向管道输出任何内容,并且该行(存储在$line中)会被管道中的下一行覆盖。