【问题标题】:Check content of file and add string if not exists检查文件内容,如果不存在则添加字符串
【发布时间】:2018-12-19 20:43:36
【问题描述】:

我想做以下事情:

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

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

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

[conf]
name=value
etc=pp

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

我尝试使用以下 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

【问题讨论】:

  • 您拥有所谓的ini 文件。有用于处理这些的 Windows API。 (提示:搜索可以处理 ini 文件的 PowerShell 模块。)
  • 即使没有这个,INI 解析器也不难实现。我希望在这里能找到几个例子。您需要解析文件,因为 INI 是一种结构化格式,您可能需要将键/值对添加到正确的部分。

标签: string file powershell insert compare


【解决方案1】:

正如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

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 2012-09-20
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多