【发布时间】:2015-04-17 00:37:45
【问题描述】:
我正在使用 PowerShell v.2.0 中的 INI 文件
我想更改具体部分中现有的 name=value 对。例如:我想为 [Sky] 部分设置 color=Blue 而不更改 [Home] 部分内的相同名称、值对。
我有正则表达式来获取我想要更改的完整部分('sky'):
[[ \t]*Sky[ \t]*\](?:\r?\n(?:[^[\r\n].*)?)*
我还有另一个有效的表达式,但前提是 Color 是该部分的名字、值对。
\[[ \t]*Sky[ \t]*\][.\s]*Color[ \t]*=[ \t]*(.*)
这是示例 ini 文件:
[Sky]
Size=Big
Color=white
[Home]
Color=Black
PS:这是我现在用来替换 ini 文件中 name=value 的 all 实例的代码,我想用新表达式更新 仅替换在给定的部分中
$Name=Color
$Value=Blue
$regmatch= $("^($Name\s*=\s*)(.*)")
$regreplace=$('${1}'+$Value)
if ((Get-Content $Path) -match $regmatch)
{
(Get-Content -Path $Path) | ForEach-Object { $_ -replace $regmatch,$regreplace } | Set-Content $Path
}
编辑:
@TheMadTechnician 解决方案非常完美 :) 这里是 Gist 中的代码:ReplaceIniValue_Sample2.ps1
@Matt 解决方案是另一种方法:
以下是完整代码:ReplaceIniValue_Sample1.ps1
我正在寻找基于正则表达式的解决方案,但 @mark z 提案完美运行,并且是来自 Windows PowerShell 的 API 调用的一个很好的示例。这是完整的代码,有一些小的调整:ReplaceIniValue_Sample3.ps1
【问题讨论】:
标签: regex powershell file-io