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