检查文件内容并添加字符串(如果不存在)

时间:2018-07-11 18:01:26

标签: string file powershell insert compare

我要执行以下操作:

我需要检查(文本)文件的内容。如果没有定义的字符串,则必须将其插入特定位置。 即:

我的文本文件是具有不同部分的配置文件,例如:

[default]
name=bob
alias=alice
foo=bar
example=value

[conf]
name=value
etc=pp

我要检查此文件中是否存在字符串“ foo = bar”和“ example = value”。如果不是,则必须插入它,但是我不能仅添加新行,因为它们必须位于特定(此处为[default])部分,而不是文件的末尾。该部分中的位置无关紧要。

我尝试使用以下PowerShell脚本,该脚本实际上只是查找一个确实存在的字符串,并在其后添加新行。因此,我可以确保在正确的部分插入新行,但是由于脚本不会检查它们是否已存在,所以不能确保它们不会被加倍。

$InputFile = "C:\Program Files (x86)\Path\to\file.ini"

$find = [regex]::Escape("alias=alice")

$addcontent1 = "foo=bar"
$addcontent2 = " example=value `n"
$InputFileData = Get-Content $InputFile
$matchedLineNumber = $InputFileData |
                     Where-Object{$_ -match $find} |
                     Select-Object -Expand ReadCount

$InputFileData | ForEach-Object{
    $_
    if ($_.ReadCount -eq ($matchedLineNumber)) {
        $addcontent1
        $addcontent2        
    }
} | Set-Content $InputFile

1 个答案:

答案 0 :(得分:0)

Bill_StewartAnsgar WiechersLotPings所述,有多个模块可与网络上可用的.ini文件一起使用。

让我们以this one为例。下载并导入后,您可以看到其如何导入文件(我删除了foo=bar进行了演示):

PS C:\SO\51291727> $content = Get-IniContent .\file.ini
PS C:\SO\51291727> $content

Name                           Value
----                           -----
default                        {name, alias,  example}
conf                           {name, etc}

从这里开始,您想要做的非常简单-检查密钥是否存在-如果不存在-添加:

if ($content.default.foo -ne 'bar') {
   $content.default.foo='bar'
}

验证是否已插入值:

PS C:\SO\51291727> $content.default

Name                           Value
----                           -----
name                           bob
alias                          alice
example                        value
foo                            bar

并导出:

$content | Out-IniFile .\out.ini