我要执行以下操作:
我需要检查(文本)文件的内容。如果没有定义的字符串,则必须将其插入特定位置。 即:
我的文本文件是具有不同部分的配置文件,例如:
[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
答案 0 :(得分:0)
如Bill_Stewart,Ansgar Wiechers和LotPings所述,有多个模块可与网络上可用的.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