使用powershell更新属性文件

时间:2014-12-21 16:58:55

标签: powershell

我想使用powershell更新下面的属性文件内容,并将$ {BuildPath}替换为location = d:\数据\样品\ lib中

tibco.alias.junit.jar=${BuildPath}\\junit.jar
tibco.alias.TextDiff.jar=${BuildPath}\\TextDiff.jar
tibco.alias.XMLDiff.jar=${BuildPath}\\XMLDiff.jar

有人可以帮助我修改PowerShell上的逻辑来更新这个属性文件。

由于

2 个答案:

答案 0 :(得分:4)

所以你有一个包含这些属性的文件是吗?谁说它是如何创建的,或者这是唯一的内容?让我们假设您有一个包含许多属性的文件,以防万一。您希望使用${BuildPath}

导出文件替换D:\Data\Sample\lib的所有出现*
$replacePath = "D:\Data\Sample\lib"
$newFile = Get-Content c:\temp\file.ini | ForEach-Object{
    $_ -replace '\${BuildPath}',($replacePath -replace '\\',"\\")
} 
$newFile | Set-Content c:\temp\file.ini

这将在c:\temp\file.ini

中提供以下输出
tibco.alias.junit.jar=D:\\Data\\Sample\\lib\\junit.jar
tibco.alias.TextDiff.jar=D:\\Data\\Sample\\lib\\TextDiff.jar
tibco.alias.XMLDiff.jar=D:\\Data\\Sample\\lib\\XMLDiff.jar

*正则表达式只会替换每一行的第一次出现。无论如何,怀疑不止一个。

答案 1 :(得分:1)

如果您要重写整个文件并且不需要保留评论,可以在此处使用加载语法https://stackoverflow.com/a/20276315/3794873,然后在此处使用写入语法https://stackoverflow.com/a/35210799/3794873,但请注意关于失去订购的说明。

如果您需要保留原始订单,请使用-replace查看其他答案,或在PowerShell中创建OrderedDict并通过循环填充文件中的行(请参阅下面的代码中的示例)。 / p>

我在下面的例子中浓缩了上面链接的问题和答案。

$filename = 'myfile.properties'
$filedata = @'
app.name=Test App
app.version=1.2
app.data=Some words
'@

$filedata | set-content $filename


# This method doesn't maintain ordering
$fileProps = convertfrom-stringdata (Get-Content $filename | Out-String) 
#could use also use -raw in PS 3 or higher instead of | Out-String
Write-Output "Initial data"
$fileProps.GetEnumerator() | % { "$($_.Name)=$($_.Value)" } | Write-Output
$fileProps['app.name'] = 'StringData App'
Write-Output "Updated data"
$fileProps.GetEnumerator() | % { "$($_.Name)=$($_.Value)" } | Write-Output
$fileProps.GetEnumerator() | % { "$($_.Name)=$($_.Value)" } | Out-File .\myfile.stringdata.properties -Encoding "ASCII"

# This method uses an ordered dict to maintain... order    
$dict = [ordered]@{}
Get-Content $filename | foreach-object {$dict.add($_.split('=',2)[0],$_.split('=',2)[1])}
Write-Output "Initial data"
$dict.GetEnumerator() | % { "$($_.Name)=$($_.Value)" } | Write-Output
$dict['app.name'] = 'Ordered Dict App'
Write-Output "Updated data"
$dict.GetEnumerator() | % { "$($_.Name)=$($_.Value)" } | Write-Output
$dict.GetEnumerator() | % { "$($_.Name)=$($_.Value)" } | Out-File .\myfile.ordered.properties -Encoding "ASCII"