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

PowerShell 是一個強大的工具,用於管理文件和文件夾。它允許您在系統上創建、複製、刪除、移動、重命名和查看文件和文件夾。
本教程將介紹在文件中使用 PowerShell 替換每個字符串出現的不同方法。
使用 Get-Content
和 Set-Content
在文件中替換每個字符串出現
'Get-Content'
命令檢索指定路徑中項目的內容,例如文件中的文本。'Set-Content'
cmdlet 是一種字符串處理工具,允許您將新內容添加到文件中或替換現有內容。
您可以使用 Get-Content
和 Set-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-Content
和 Set-Content
cmdlets 在單個文件中替換字符串的不同方法,提供了基本和更高效的 -Raw
參數方法。隨後,我們利用 File
類的力量來替換文件中的文本,展示了一種更高級的技術。
此外,我們通過在目錄及其子目錄中替換文本擴展了我們的知識。這些方法使人們能夠輕鬆編輯文件中的文本,並展示了 PowerShell 在此類任務中的實用性。