• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

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

分類:PowerShell

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide