如何使用 PowerShell 替換文件中的文本

  1. 使用 Get-ContentSet-Content 在文件中替換每個字符串出現
  2. 使用 File 類在文件中替換每個字符串出現
  3. 在多個文件中替換每個字符串出現的 PowerShell
  4. 結論
如何使用 PowerShell 替換文件中的文本

PowerShell 是一個強大的工具,用於管理文件和文件夾。它允許您在系統上創建、複製、刪除、移動、重命名和查看文件和文件夾。

本教程將介紹在文件中使用 PowerShell 替換每個字符串出現的不同方法。

使用 Get-ContentSet-Content 在文件中替換每個字符串出現

'Get-Content' 命令檢索指定路徑中項目的內容,例如文件中的文本。'Set-Content' cmdlet 是一種字符串處理工具,允許您將新內容添加到文件中或替換現有內容。

您可以使用 Get-ContentSet-Content cmdlet 在文件中替換每個字符串出現。

語法:

(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'

在語法中,我們將 'OldString' 替換為我們想要替換的字符串,並將 'NewString' 替換為我們想要放置在其位置的字符串。請確保將 'Path\to\Your\File.txt' 替換為文件的實際路徑。

讓我們舉個例子。我們在目錄 (C:\New) 中有一個文本文件 (test.txt),內容如下。

Get-Content C:\New\test.txt

輸出:

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

現在,讓我們使用 -Replace 參數在 test.txt 文件中將每個字符串 'Linux' 替換為 'PowerShell'。在 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 參數,如下所示。-Raw 參數用於確保 'C:\New\test.txt' 的內容作為單個字符串讀取,從而有效地在整個文件中將 'Linux' 替換為 'PowerShell'

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

在此代碼中,我們將位於 'C:\New\test.txt' 的文件內容作為單個字符串讀取。然後,我們使用 -Replace 運算符在該字符串中查找並替換所有出現的 'Linux''PowerShell'

最後,我們將修改後的內容保存回相同的文件,有效地使用新文本更新它。這段代碼是使用 PowerShell 在文件中執行文本替換的一種簡單方法。

使用 File 類在文件中替換每個字符串出現

File 類提供了靜態方法來執行常見操作,如創建、複製、移動、打開、刪除和追加到單個文件。使用 File 類的 Replace() 方法來替換指定文件的內容。

語法:

$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)

參數:

  • "FilePath":應替換為實際的文件路徑。
  • "OldString":這是您想要替換的字符串。
  • "NewString":這是您想要用來替換的字符串。

ReadAllText() 方法打開一個文本文件,讀取該文件中的所有文本,然後關閉文件。

WriteAllText() 方法創建一個新文件,將特定字符串寫入該文件,並關閉文件。如果目標文件已在位置中存在,則該文件將被覆蓋。

讓我們舉個例子。我們在目錄 (C:\New) 中有一個文本文件 (python.txt),內容如下。

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)

在上面的代碼中,我們首先創建一個名為 $string 的變量,該變量將存儲在進行文本替換之後的 'C:\New\python.txt' 文件的修改內容。使用 [System.IO.File]::ReadAllText("C:\New\python.txt"),我們讀取整個文件的內容並將其保存到 $string

在下一步中,我們使用 Replace() 方法定位內容中所有 "Python" 的實例,並將其替換為 "JavaScript",有效地更新文本。最後,我們使用 [System.IO.File]::WriteAllText("C:\New\python.txt", $string) 將修改後的內容寫回相同的文件,覆蓋原始文本並保留我們的更改。

檢查在 C:\New\python.txt 中所做的更改。

Get-Content C:\New\python.txt

輸出:

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

在輸出中,我們可以看到 "Python" 被替換為 "JavaScript"

在多個文件中替換每個字符串出現的 PowerShell

上述方法在單個文件中替換字符串。有時,您可能需要在多個文件中替換相同的字符串。

在這種情況下,您可以使用以下命令在多個文件中替換每個出現的指定字符串。

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

在上面的代碼中,我們首先使用 Get-ChildItem 收集 'C:\New' 目錄中的 '.txt' 文件列表。星號 * 通配符指定所有以 .txt 為文件名擴展的文件。

然後,我們遍歷每個文件,使用 Get-Content 讀取其內容,並應用替換操作,使用 -Replace 運算符將 'weekly' 更改為 'monthly'。然後將修改後的內容寫回到相同的文件中,使用 Set-Content

此過程對目錄中的每個文件重複,有效地將 'weekly' 替換為 'monthly'

我們還可以使用 -Recurse 參數在指定目錄及其子目錄中的文件中替換字符串。

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

在此代碼中,我們首先使用 Get-ChildItem 組裝一個在 'C:\New' 及其子目錄中的 '.txt' 文件列表。-Recurse 選項確保我們不僅在指定目錄中搜索這些文件,還在其子目錄中搜索。

然後我們使用一對 ForEach 循環來訪問每個文件的內容。在內部循環中,我們使用 -Replace 運算符將文本中的 'weekly' 替換為 'monthly'

最後,我們將調整後的內容保存回相同的文件。此過程會遍歷所有在 'C:\New' 及其子文件夾中的文件,讓我們能有效地在眾多文件和嵌套目錄中將 'weekly' 替換為 'monthly'

結論

在本文中,我們探討了使用 Get-ContentSet-Content cmdlets 在單個文件中替換字符串的不同方法,提供了基本和更高效的 -Raw 參數方法。隨後,我們利用 File 類的力量來替換文件中的文本,展示了一種更高級的技術。

此外,我們通過在目錄及其子目錄中替換文本擴展了我們的知識。這些方法使人們能夠輕鬆編輯文件中的文本,並展示了 PowerShell 在此類任務中的實用性。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
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