2014-12-21 93 views
-1

我想用PowerShell的以下屬性文件內容進行更新和替換$ {構建路徑}的位置= d:\ DATA \樣本\ lib中更新屬性文件使用PowerShell

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

可能有人請幫助我的邏輯在PowerShell上更新這個屬性文件。

謝謝

+0

除文件上還有其他更多屬性還是它? – Matt

+0

馬特,上面的內容是在一個屬性文件(alias.properties),我只是想替換$ {}構建路徑與位置(d \:\\ \\的數據樣本\\ LIB) – Praveen

+0

你需要逃避所有的斜線和冒號? – Matt

回答

3

所以你有一個文件,其中的屬性是嗎?誰來說說它是如何創建的,或者如果這是唯一的內容?讓我們假設你有一個文件有很多其他的屬性,以防萬一。你想瀏覽文件替換所有出現*的${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 

*正則表達式如下輸出將只替換每行第一次出現。無論如何,懷疑會有不止一個。

歡迎,如果你第一次表現出一定的努力,SO

這個社區工作好了很多。你的問題沒有顯示出來。我只看到了一個答案的請求。我們在這裏支持程序員和編程愛好者。我們不是代碼寫作服務。

+0

非常感謝Matt ...這項工作非常完美 – Praveen

+0

歡迎來到SO。不要忘記閱讀我更新的答案。 – Matt

1

如果您要重寫整個文件,並且您不需要保留註釋,則可以使用此處的加載語法,https://stackoverflow.com/a/20276315/3794873,然後使用此處的寫入語法https://stackoverflow.com/a/35210799/3794873,但請注意丟失排序的注意事項。

如果您需要保持原始順序,請參閱使用-replace的其他答案,或者在PowerShell中創建一個OrderedDict並通過文件中的循環遍歷它(請參閱下面的代碼示例)。

我已經凝聚了鏈接的問題,並在下面的例子上面的回答。

$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" 
+0

如果文件包含多個相同的評論,該怎麼辦?它抱怨說,它不能再添加鍵值... – Xerus

+0

我怕重複的意見將是棘手的,可能會涉及到需要跟蹤有多少次相同的註釋是「看到」在逐行讀取文件中的行稍微不同的方式,並在轉換爲散列表之前向第一個實例之後的每個實例附加一個數字。 – dragon788

相關問題