【发布时间】: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