使用 PowerShell 替換檔案中的文字

Rohan Timalsina 2023年1月30日 2022年5月16日
  1. 在 PowerShell 中使用 Get-ContentSet-Content 替換檔案中每個出現的字串
  2. 在 PowerShell 中使用 File 類替換檔案中每個出現的字串
  3. 使用 PowerShell 替換多個檔案中每個出現的字串
使用 PowerShell 替換檔案中的文字

PowerShell 是一個強大的工具,可以執行不同的檔案和資料夾操作。它允許你建立、複製、刪除、移動、重新命名和檢視系統上的檔案和資料夾。

PowerShell 有一些有用的 cmdlet,可以讀取、寫入和替換檔案中的內容。本教程將介紹使用 PowerShell 替換檔案中出現的每個字串的不同方法。

在 PowerShell 中使用 Get-ContentSet-Content 替換檔案中每個出現的字串

Get-Content 獲取指定路徑中的專案內容,例如檔案中的文字。Set-Content 是一個字串處理 cmdlet,允許你編寫新內容或替換檔案中的現有內容。

你可以使用 Get-ContentSet-Content cmdlet 替換檔案中出現的每個字串。我們在目錄 (C:\New) 中有一個文字檔案 (test.txt),其內容如下。

Get-Content C:\New\test.txt

輸出:

Welcome to Linux tutorials.
Linux is free.
Linux is powerful.

現在,讓我們藉助 -Replace 引數在 test.txt 檔案中用 PowerShell 替換字串 Linux 的所有出現。Get-Content 周圍需要括號 ()

(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

然後檢視 test.txt 檔案的內容以驗證更改。

Get-Content C:\New\test.txt

如你所見,Linux 已成功替換為 PowerShell

輸出:

Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.

此方法使用字串陣列來查詢和替換檔案中的字串,因為 Get-Content cmdlet 返回一個陣列。如果 Get-Content 返回單個字串,則更容易替換字串。

你可以使用 -Raw 引數,如下所示。

(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

在 PowerShell 中使用 File 類替換檔案中每個出現的字串

File 類為常見操作提供靜態方法,例如建立、複製、移動、開啟、刪除和附加到單個檔案。使用 File 類的 Replace() 方法替換指定檔案的內容。

Get-Content C:\New\python.txt
Find the best Python tutorials and learn Python easily from DelftStack.

這是一個使用 File 類方法替換檔案中每次出現的字串的示例。

$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python","JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)

ReadAllText() 方法開啟一個文字檔案,讀取該檔案中的所有文字,然後關閉該檔案。

WriteAllText() 方法建立一個新檔案,將特定字串寫入檔案,然後關閉檔案。如果目標檔案已存在於該位置,則會被覆蓋。

驗證在 C:\New\python.txt 中所做的更改。

Get-Content C:\New\python.txt

輸出:

Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.

使用 PowerShell 替換多個檔案中每個出現的字串

上述方法替換單個檔案中的字串;有時,你可能需要替換多個檔案中的相同字串。在這種情況下,你可以使用以下命令替換多個檔案中每次出現的指定字串。

Get-ChildItem 'C:\New\*.txt' | ForEach {
     (Get-Content $_) | ForEach  {$_ -Replace 'weekly', 'monthly'} | Set-Content $_
}

Get-ChildItem cmdlet 獲取指定目錄 C:\New 中的檔案。星號 * 萬用字元指定所有副檔名為 .txt 的檔案。

ForEach 迴圈中,你可以對陣列中的每個專案執行一個或多個命令。

你可以使用 -Recurse 引數替換指定目錄及其子目錄中檔案中的字串。

Get-ChildItem 'C:\New\*.txt' -Recurse | ForEach {
     (Get-Content $_) | ForEach  {$_ -Replace 'weekly', 'monthly'} | Set-Content $_
}
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相關文章 - PowerShell String