我希望它能夠通過一些文件夾遞歸地找到具有特定結尾的所有文件,然後通過找到的文件來完成替換並保存。當我有一個給定的文件名時,我可以使它工作,但是當涉及到未知時,我似乎遇到了一些麻煩。做一個變量替換並保存文件
思想是從文件中讀取給定環境的變量,並將其作爲變量保存到PowerShell中(這部分似乎工作,所以我沒有再提及它),然後簡單地用未知文件集。
我一直在尋找this question,這似乎有一些類似的問題,除了我試圖使用變量替代。也看了一些previous answer for replace,但再次,這不是替代,而是變量替代,所以它似乎工作有點不同。因此,考慮到這一點,這是我走到這一步:
$places = 'C:\Users\Roger\Documents\test\Program Files (x86)'
$places |
Get-ChildItem -Recurse -Include *.ini,*.config |
ForEach-Object {
(Get-Content $_) | % {
$ExecutionContext.InvokeCommand.ExpandString($_) |
Set-Content $_
'Processed: {0}' -f $_.FullName
}
}
:
Get-ChildItem -Path .\ -Include *.ini,*.exe.config -Recurse | %{ gc $_ } | %{
$ExecutionContext.InvokeCommand.ExpandString($_) +
(Get-Content $_.FullName | Out-String) | Set-Content -Path $_.FullName
}
試圖做一些與第二連桿後:
看着第一個鏈接的例子之後
,當然我自己微弱的嘗試:
Get-ChildItem .\ -Include *.ini,*.exe.config -Recurse | %{ gc $_ } | %{
$ExecutionContext.InvokeCommand.ExpandString($_)
} | Set-Content $_.FullName
您的第二個代碼示例是一個簡短的關閉大括號,而第三個示例有一個太多。另外,你想要替代什麼?你想用什麼替代它?代碼示例的實際結果與預期結果有什麼不同? –
有時你只需要更多的眼睛。我試着根據你的意見糾正@AnsgarWiechers希望它更清楚。第二個示例實際上完成了現在的運行,它似乎很難創建基於讀入Powershell的變量的文件,而不是更改已有的文件。 堅固的第三個樣本仍然給出一些錯誤,因爲「Get-Content:無法將參數綁定到參數'路徑',因爲它是空的。」所以可能有一些與格式相關的東西我看不到。 在任何情況下,我只希望它能像描述的那樣工作。我的代碼可能會關閉,或者它可能需要調整,我不知道...... – SkyRaider
現在看來樣本2實際上在某種程度上起作用。只是在變量替換之後,Set-Content似乎並不理解哪個文件實際上用於替代,所以Set-Content決定創建一個新的文件,其中變量beeing的名稱被替換爲「Database = $ { DB_DRIVER}「我想沿着管道鬆開Set-Content命令的文件名和路徑。我將代碼分解並發現文件中行的替換確實發生,只是...文件從不保存爲從內容獲取的文件。 – SkyRaider