String 检查文件内容,如果不存在,则添加字符串

String 检查文件内容,如果不存在,则添加字符串,string,file,powershell,insert,compare,String,File,Powershell,Insert,Compare,我想做以下工作: 我需要检查(文本)文件的内容。如果定义的字符串不存在,则必须将其插入到特定位置。 即: My textfile是一个包含不同部分的配置文件,例如: [默认值] name=bob 别名=爱丽丝 foo=bar 示例=值 [形态] 名称=值 etc=pp 我想检查这个文件中是否存在字符串“foo=bar”和“example=value”。如果没有,它必须被插入,但我不能仅仅附加新行,因为它们必须在特定的(这里是[default])部分,而不是文件的末尾。该部分中的位置无关紧要 我

我想做以下工作:

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

My textfile是一个包含不同部分的配置文件,例如:

[默认值]
name=bob
别名=爱丽丝
foo=bar
示例=值
[形态]
名称=值
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
如所述,web上有多个模块可用于
.ini
文件

让我们举个例子。下载并导入后,您可以看到它是如何导入您的文件的(为了演示,我删除了
foo=bar
):

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

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

您有一个名为
ini
的文件。有用于处理这些问题的Windows API。(提示:搜索能够处理
ini
文件的PowerShell模块。)即使没有它,ini解析器也不难实现。我希望这里有几个例子。您需要解析该文件,因为INI是一种结构化格式,您可能需要将密钥/值对添加到右侧部分。
$content | Out-IniFile .\out.ini