根据循环中的一组字符串删除txt文件中的一行

根据循环中的一组字符串删除txt文件中的一行

我浏览过这个网站和 Stack Overflow,试图找到一个可行的组合。我不确定是 PowerShell 的版本还是什么。但我无法让这个脚本按我想要的方式工作。我也无法让其他脚本工作。我希望脚本在文件中查找字符串并删除该行而不留下空行。目前这有效,但它会留下不在字符串中的任何文本,并且还会留下回车符。

$Whitelist = @(
        String1
        String2
        String3 
)

$Path = .\whitelist.txt
$Content = Get-Content .\output.log
foreach ($Code in $whitelist)
        {
        $Content = $Content -replace $Code,""
        }
        $Content | Set-Content -Path .\output.log

我不确定变量为什么不起作用。我不断收到错误,提示需要参数或找不到路径。我希望它看起来像这样,并理解我的错误,因为我试图根据相同的原则编写脚本

$Whitelist = @(
        String1
        String2
        String3 
)

$Path = .\whitelist.txt
$Content = Get-Content -Path $Path
foreach ($Code in $whitelist)
        {
        $Content = $Content -replace $Code,""
        }
        $Content | Set-Content -Path $Path

答案1

$Content我认为您的问题是数组中变量的使用。我嘲笑以下内容:

源文件内容:

培根吐司香肠鸡蛋番茄酱豆类

去除培根、鸡蛋和豆子的有效代码(抱歉我刚吃过早餐):

$Whitelist = @(
    "Bacon"
    "Eggs"
    "Beans"
    )

ForEach ($Code in $Whitelist)
    {
        (Get-Content -Path C:\temp\data.txt).Replace($Code,'') | Set-Content C:\temp\data.txt
        Write-Host "Removing $Code" -ForegroundColor Green
    }

我添加了 Write-Host 来确认每个字符串值都被删除了。

更新的源文件:

烤面包香肠番茄酱

相关内容