PowerShell替換字符串


在有的時候,可能需要對多個文件中的某個字符串進行替換,我們可以通過PowerShell對文件遍歷並替換其字符串。

例:在E:\test目錄下存在有多個子目錄,我們需要將該目錄下xml格式文件中的字符串“nihao”替換為“Hello”,分為以下兩個步驟:

1、遍歷該目錄下的所有*.xml文件

2、對查找出的*.xml文件中的字符串進行替換

使用Get-ChildItem命令可以對文件或目錄進行遍歷,–Rescure參數遍歷子目錄,-Include 參數過濾文件類型,如下:

Get-Childitem E:\test -Recurse -Include *.xml

獲取到所需要遍歷的文件之后,接下來使用Get-Content命令獲取文件中的具體內容,由於上一步輸出有多個文件,在此使用Foreach語句對每個文件進行操作,讀取每個文件中的內容,命令如下:

$files = Get-Childitem E:\test -Recurse -Include *.xml

foreach ($file in $files)

{

$content = get-content $file.pspath

$content

}

Get-Content在讀取文件內容的時候,會以“行”為單位,將其放入到一個數組中,所以在替換的時候,還需要使用 Foreach語句對每行進行處理,使用 Replace方法進行替換,命令如下:

foreach ($line in $content)

   {

   $liner = $line.Replace("nihao","Hello")

   } 

在此處需要注意的是,替換完成后,實際上替換后的內容還並沒有被真正寫入到原文件中,還需要使用Set-Content命令將替換后的內容寫入到原文件中,命令如下:

foreach ($line in $content)

   {

   $liner = $line.Replace("nihao","Hello")

   Set-Content $file.pspath -Value $liner

   }

此時仍然會出現一個新的問題,就是每個文件被更新后,只是保留了最后一行的內容,所以在這里不應該使用Set-Content命令,而是應該使用Add-Content命令,將修改后的內容追加到原文件中,但這樣一來,新內容和舊內容都會存在於同一個文件中,所以在追加新內容之前,需要先將原文件內容清空,可以使用Clear-Content命令。

完整的腳本命令如下:

copy-item E:\test  F:\ -force -recurse  #在替換之前先對文件進行備份

$files = Get-Childitem E:\test -Recurse -Include *.xml

foreach ($file in $files)   #遍歷文件

{

 $content = get-content $file.pspath

  clear-content $file.pspath  #清空每個文件內容

   foreach ($line in $content) #對每個文件中的行進行遍歷

   {

   $liner = $line.Replace("nihao","Hello")

   Add-content $file.pspath -Value $liner #附件內容到原文件

   }

 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM