2014-12-22 32 views
0

我希望它能夠通過一些文件夾遞歸地找到具有特定結尾的所有文件,然後通過找到的文件來完成替換並保存。當我有一個給定的文件名時,我可以使它工作,但是當涉及到未知時,我似乎遇到了一些麻煩。做一個變量替換並保存文件

思想是從文件中讀取給定環境的變量,並將其作爲變量保存到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 
+0

您的第二個代碼示例是一個簡短的關閉大括號,而第三個示例有一個太多。另外,你想要替代什麼?你想用什麼替代它?代碼示例的實際結果與預期結果有什麼不同? –

+0

有時你只需要更多的眼睛。我試着根據你的意見糾正@AnsgarWiechers希望它更清楚。第二個示例實際上完成了現在的運行,它似乎很難創建基於讀入Powershell的變量的文件,而不是更改已有的文件。 堅固的第三個樣本仍然給出一些錯誤,因爲「Get-Content:無法將參數綁定到參數'路徑',因爲它是空的。」所以可能有一些與格式相關的東西我看不到。 在任何情況下,我只希望它能像描述的那樣工作。我的代碼可能會關閉,或者它可能需要調整,我不知道...... – SkyRaider

+0

現在看來樣本2實際上在某種程度上起作用。只是在變量替換之後,Set-Content似乎並不理解哪個文件實際上用於替代,所以Set-Content決定創建一個新的文件,其中變量beeing的名稱被替換爲「Database = $ { DB_DRIVER}「我想沿着管道鬆開Set-Content命令的文件名和路徑。我將代碼分解並發現文件中行的替換確實發生,只是...文件從不保存爲從內容獲取的文件。 – SkyRaider

回答

1
$places = 'C:\temp' 
$places | 
Get-ChildItem -Recurse -Include *.ini,*.config | ForEach-Object { 
    (Get-Content $_) | ForEach-Object { 
     $ExecutionContext.InvokeCommand.ExpandString($_) 
    } | Set-Content $_ 
    'Processed: {0}' -f $_.FullName 
} 

Set-Content移出ForEach-ObjectSet-Content本來會嘗試爲每行使用當前行作爲它的名字,正如你所看到的那樣。另外,對於你和其他人的理智,你應該嘗試和使用別名是否一致。我看到ForEach-Object%這可能會讓新用戶感到困惑。

+0

哈哈,我想複製粘貼和一致性不是一個好的組合;)測試往往採取最爲粗糙的路徑。現在就試用你的解決方案。並且工作出色:)謝謝 – SkyRaider

相關問題