从PowerShell中的多个文本文件中删除行

时间:2016-02-05 15:47:23

标签: powershell text-files powershell-v2.0

我正在尝试从多个文本文件中删除具有已定义内容的行。

它在核心中工作,但即使没有进行任何更改,它也会重写每个文件,如果你只修改约3000个logonscripts中的50个,那就不好了。 我甚至做了一个if语句,但似乎它不起作用。

好吧,这就是我已经拥有的:

#Here $varFind will be escaped from potential RegEx triggers.
$varFindEscaped = [regex]::Escape($varFind)

#Here the deletion happens.
foreach ($file in Get-ChildItem $varPath*$varEnding) {
    $contentBefore = Get-Content $file
    $contentAfter = Get-Content $file | Where-Object {$_ -notmatch $varFindEscaped}
    if ($contentBefore -ne $contentAfter) {Set-Content $file $contentAfter}
}

变量意味着什么:
$ varPath 是logonscripts的路径 $ varEnding 是要修改的文件的文件结尾 $ varFind 是触发删除该行的字符串。

任何帮助都将受到高度赞赏。

问候
LöwäCent

1 个答案:

答案 0 :(得分:0)

您必须阅读该文件,但您的更改条件有所改善可能有所帮助。

#Here the deletion happens.
foreach ($file in Get-ChildItem $varPath*$varEnding) {
    $data = (Get-Content $file)
    If($data -match $varFindEscaped){
        $data | Where-Object {$_ -notmatch $varFindEscaped} | Set-Content $file
    }
}

将文件读入$data。检查文件中是否存在模式$varFindEscaped。如果它是过滤掉匹配相同模式的那些。另外,我们进入下一个文件。