【问题标题】:Powershell INI editingPowershell INI 编辑
【发布时间】:2014-04-02 05:08:34
【问题描述】:

我想更改 INI 文件中的一些值。不幸的是,我有 2 个不同部分的键,它们共享相同的名称但需要不同的值。我的代码使用来自PsIniGet-IniContent 函数。

示例 INI 文件:

[PosScreen]
BitmapFile=C:\Temp\Random.bmp
Bitmap=1

[ControlScreen]
BitmapFile=C:\Temp\Random.bmp
Bitmap=1 

我需要把上面的改成如下:

[PosScreen]
BitmapFile=C:\Temp\FileC.bmp
Bitmap=1

[ControlScreen]
BitmapFile=C:\Temp\FileD.bmp
Bitmap=1 

我使用的 PowerShell 代码似乎可以工作,但它将每个值都更改为“文件 D”。显然是对所有内容进行了两次解析,并且每个部分的名称都相同。

$NewFileC = "C:\Temp\FileC.bmp"
$NewFileD = "C:\Temp\FileD.bmp"
$POSIniContent = Get-IniContent "C:\scripts\Update-EnablerImage\WINSUITE.INI"
$BOIniContent = Get-IniContent "C:\scripts\Update-EnablerImage\WINSUITE.INI"

If ($POSIniContent["PosScreen"]["BitmapFile"] -ne $NewFileC) {
  Get-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" |
    ForEach-Object {$_ -replace "BitmapFile=.+" , "BitmapFile=$NewFileC" } |
    Set-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI"
}

If ($BOIniContent["ControlScreen"]["BitmapFile"] -ne $NewFileD) {
  Get-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI" |
    ForEach-Object {$_ -replace "BitmapFile=.+" , "BitmapFile=$NewFileD" } |
    Set-Content "C:\scripts\Update-EnablerImage\WINSUITE.INI"
}

我的斗争是如何独立地改变每一个。我是一个脚本新手,所以请寻求帮助。尝试使用条件逻辑(例如ForEach $line in $INIFile),但没有运气。

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    你把事情复杂化了。您可以使用Get-IniContentOut-IniFile,如下所示:

    $ini = Get-IniContent c:\temp\ini.ini 
    $ini["posscreen"]["BitmapFile"] = "C:\Temp\FileC.bmp"  
    $ini | Out-IniFile -FilePath c:\temp\ini2.ini
    

    请注意,如果要覆盖原始文件,必须将-Force 添加到Out-IniFile 调用中。

    【讨论】:

    • Get-IniContent 不是 built-in 以获取更多信息
    • 在编辑完 ini 文件后,随后读取它的程序 (c#) 无法读取文件的第一部分。问题在于 encondig,我必须将其设置为 ascii; $ini | Out-IniFile -FilePath $iniPath -Encoding ascii
    猜你喜欢
    • 2017-12-17
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2020-02-16
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多