首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用powershell更新属性文件

使用powershell更新属性文件
EN

Stack Overflow用户
提问于 2014-12-21 16:58:55
回答 2查看 6.8K关注 0票数 0

我希望使用powershell更新下面的属性文件内容,并将${BuildPath}替换为location = D:\Data\Sample\lib

代码语言:javascript
复制
tibco.alias.junit.jar=${BuildPath}\\junit.jar
tibco.alias.TextDiff.jar=${BuildPath}\\TextDiff.jar
tibco.alias.XMLDiff.jar=${BuildPath}\\XMLDiff.jar

有谁能帮我在powershell上逻辑更新这个属性文件吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-21 17:45:09

所以你有一个文件里面有这些属性,是吗?谁来说它是如何创建的?如果这是唯一的内容呢?让我们假设您有一个包含许多属性的文件,以防万一。您希望在文件中导航,用D:\Data\Sample\lib替换所有出现的D:\Data\Sample\lib*

代码语言:javascript
复制
$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中提供以下输出

代码语言:javascript
复制
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

* regex只会替换每一行的第一次出现。不管怎么说,肯定不止一个。

票数 5
EN

Stack Overflow用户

发布于 2016-10-17 21:02:29

如果您正在重写整个文件,并且不需要保留注释,那么您可以在这里使用load语法,https://stackoverflow.com/a/20276315/3794873,然后在这里使用写语法,https://stackoverflow.com/a/35210799/3794873,但是请注意丢失顺序的注意事项。

如果您需要保持原来的顺序,请使用-replace查看另一个答案,或者在PowerShell中创建一个OrderedDict,并通过文件中行上的一个循环填充它(参见下面代码中的示例)。

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

代码语言:javascript
复制
$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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27591628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档