評論中的代碼很接近,但只是有一些語法問題。它開始強:
$mabyIni = "C:\New\Path"
$AiniFile = Get-ChildItem - Path "C:\New\Path*" -include *.ini -recurse
ForEach($file in $AiniFile) {
到目前爲止,這麼好。您可以定義新路徑,並在舊路徑中獲取.ini文件列表,然後開始循環這些文件。到目前爲止,這是很好的代碼。然後事情開始迷誤。
我看到你試圖讓每個.ini文件的內容,有關替換字符串,然後將該文件複製到新的路徑與此輸出:
(Get-Content $AiniFile.PSPath) | ForEach-Object {
$file -replace [regex]:Escape('C:\A\Path'),('$mabyIni')
}| Set-Content $mabyIni -include *.ini
不幸的是你使用錯誤的變量,並在那裏增加一個額外的ForEach
循環。我們從Get-Content
一行開始。在此腳本中,您正在循環文件,每個當前文件由$file
表示。所以你真正想得到的內容是$file
,而不是$AiniFile.PSPath
。
(Get-Content $file)
好吧,那讓我們把那個文件的內容當作一個字符串數組。現在,我猜你不知道,但-Replace
運算符工作在字符串數組。完美,我們只是碰巧得到了一串字符串!由於Get-Content
命令被封裝在括號中,所以它首先完成,我們實際上可以緊跟其後的命令-Replace
。
(Get-Content $file) -replace [regex]:Escape('C:\A\Path'),$mabyIni
您的-replace
命令,你有超級接近!事實上,我必須給你在那裏使用[regex]::escape()
的道具。這完全是一個親舉動,幹得好!唯一的問題是替換字符串不需要在括號中,並且它是單引號的,所以它不會擴展字符串,並且.ini文件將全部具有如下行:
AIniText = $mabyIni\AIniText
不完全是你想要的我猜,所以我刪除了括號(他們沒有傷害任何東西,但也沒有幫助,所以爲了清潔和簡單,我擺脫了他們),我擺脫了單引號'
以及我們真的只想要存儲在該變量中的字符串。
所以現在我們循環瀏覽文件,讀取內容,用新路徑替換舊路徑,剩下的就是輸出新的.ini文件。它看起來已經就位,所以我們只使用文件的現有路徑,並將內容設置爲更新後的數據。
(Get-Content $file) -replace [regex]:Escape('C:\A\Path'),$mabyIni | Set-Content -Path $File.FullName
好的,完成了!您只需關閉ForEach
循環,然後運行它。
$mabyIni = "C:\New\Path"
$AiniFile = Get-ChildItem - Path "C:\New\Path*" -include *.ini -recurse
ForEach($file in $AiniFile) {
(Get-Content $file) -replace [regex]:Escape('C:\A\Path'),$mabyIni | Set-Content -Path $File.FullName
}
它應該在ini文件中搜索Path,並用 替換爲新的。我試過也是:$ mabyIni =「C:\ New \ Path」 $ AiniFile = Get-ChildItem - 路徑「C:\ New \ Path \ *」-include * .ini -recurse ForEach($ file in $ AiniFile) { (Get-Content $ AiniFile.PSPath)| ForEach-Opject {$ file -replace [regex]:Escape('C:\ A \ Path'),('$ mabyIni')} | 設置內容$ mabyIni -include * .ini – Mkey
你應該更新你的問題,而不是發表評論。評論中的代碼很難閱讀。無論如何,我在你的評論中看到了代碼的問題,並且我會寫出一個答案,說明爲什麼它不起作用。 – TheMadTechnician