撰写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


读取档案内容

Step 3
由于在预设的情况下,Get-Content-Raw


以单一字串传回档案内容

Step 4
使用PowerShell 的取代运算子(假设我们想要将 -replacePowerShellSuperShell


取代文字

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

讀者互動

 

Oh 游读者 👋
It’s nice to meet you.

每周三,您都将收到一封内容详实的Newsletter.

close

Oh 游读者 👋
It’s nice to meet you.

每周三,您都将收到一封内容详实的Newsletter.