文章目录[隐藏]
撰写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 的取代运算子(假设我们想要将 -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
讀者互動