Categories: PowerShell

PowerShell 取代檔案文字內容教學與範例

撰寫 PowerShell 指令稿自動將文字檔案中指定的文字內容,以新的文字內容取代。

如果我們想要將一個文字檔案中的某些文字替換成新的文字,只要用普通的文字編輯器,配合搜尋與取代功能即可輕鬆完成,但是假設我們想要處理的檔案數量很多的時候(例如數十個或上百個檔案),就很難靠手動的方式來完成。

PowerShell 有許多的 cmdlets 可以使用,只要將適當的 cmdlets 組合起來,就可以輕鬆解決這種大量檔案的文字取代問題,以下我們將逐步解說指令稿的撰寫步驟。

檔案內容文字取代

Step 1
為了示範方便,我們先建立一個文字檔案,其內容如下:

PowerShell is a task automation and configuration management framework from Microsoft.
PowerShell commands follow a Verb-Noun semantic with a set of parameters.
It's easy to learn and use PowerShell.

而我們將這個文字檔案儲存在 D:OfficeGuidedemo.txt
Step 2
在取代檔案中的文字之前,必須先使用 Get-Content 這個指令先把檔案內容讀取出來:

# 讀取檔案內容
Get-Content -path D:OfficeGuidedemo.txt
讀取檔案內容

Step 3
由於在預設的情況下,Get-Content 會以換行字元作為分隔符號,將檔案內容切成一行一個元素的字串陣列,而若要進行文字取代工作的話,可加上 -Raw 參數,讓它保留檔案中的換行字元,直接將所有文字內容轉為一個字串:

# 以單一字串傳回檔案內容
Get-Content -path D:OfficeGuidedemo.txt -Raw
以單一字串傳回檔案內容

Step 4
使用 PowerShell 的取代運算子(-replace),將舊字串以新字串取代。假設我們想要將 PowerShell 取代為 SuperShell,就可以這樣寫:

# 取代文字
(Get-Content -path D:OfficeGuidedemo.txt -Raw) -replace 'PowerShell','SuperShell'
取代文字

Step 5
將取代完成的文字內容,使用 Set-Content 儲存至檔案中:

# 將取代完成的文字儲存至檔案
((Get-Content -path D:OfficeGuidedemo.txt -Raw) -replace 'PowerShell','SuperShell') |
  Set-Content -Path D:OfficeGuidedemo_replace.txt

# 查看取代完成的檔案內容
Get-Content -path D:OfficeGuidedemo_replace.txt
將取代完成的文字儲存至檔案

這裡我們將處理完成的結果儲存至 demo_replace.txt 這個新檔案中,如果想要覆蓋原來的檔案,就指定為原來的檔案名稱即可。

完成單一檔案的文字取代之後,接下來就可以結合迴圈,處理大量的文字檔了。

迴圈處理大量檔案

Step 1
使用 Get-ChildItem 配合 Foreach-Object 來處理大量檔案,先嘗試將所有的檔案內容讀取出來,測試一下迴圈結構:

# 讀取指定目錄所有的檔案內容
Get-ChildItem D:OfficeGuide*.txt |
  Foreach-Object {
    Get-Content $_
  }

這段程式碼會將 D:OfficeGuide 目錄下所有的文字檔案(*.txt)逐一放入迴圈當中,交給 Get-Content 讀取檔案內容。

Step 2
確認迴圈可以正常執行之後,將取代文字的程式碼加入迴圈之中:

# 取代所有文字檔中的文字
Get-ChildItem D:OfficeGuide*.txt |
  Foreach-Object {
    ((Get-Content -path $_ -Raw) -replace 'PowerShell','SuperShell') |
      Set-Content -Path ($_ -replace '.txt$','_replace.txt')
  }

這裡我們將原始檔案名稱自動加上 _replace,做為新的檔案名稱,也就是將完整檔案名稱結尾的 .txt_replace.txt 來取代,這樣就可以一次處理大量檔案的文字取代工作了。

參考資料:MCP Mag

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago