要把文字檔裡面特定的文字換成其他文字,就可用 $_。例如,要將 2016 換成 2017,也就是將下面的內容:
2016 年 4 月 13 日 2016 年 8 月 22 日 2017 年 1 月 3 日 2017 年 3 月 31 日
變成:
2017 年 4 月 13 日 2017 年 8 月 22 日 2017 年 1 月 3 日 2017 年 3 月 31 日
使用下面的指令即可,為了便於比較結果,刻意讓來源的文字檔名與目的檔名不一樣:
(Get-Content D:\Tmp\t1.txt -Encoding UTF8) | Foreach-Object {$_ -replace "2016", "2017"} | Set-Content D:\Tmp\t2.txt
透過 Get-Content 取得 D:\Tmp\t1.txt 的內容,並將它儲存於陣列變數中,如此一來,每個項目就是每一行的內容。請特別注意,為了確保在完全取得文字檔內容之前,PowerShell 不會做其他事情,所以要用一組刮號()把 Get-Content 包起來。
接著使用 ForEach-Object 將 Get-Content 讀取到的陣列,逐行檢查,並呼叫 replace 方法來將內含 2016 的文字換成 2017,也就是 $_ -replace 這段指令碼所做的事情。
最後透過 Set-Content 把結果寫入 D:\Tmp\t2.txt。
提醒大家,如果遇到要取代的字元是 PowerShell 的保留字元時,要先加上逸出字元 \,然後尾才是保留字元,比方說,要將 * 號換成 %,就要寫成:
"\*", "%"
PowerShell 的保留字元如下所列:
- $
- (
- )
- *
- +
- .
- [
- ]
- ?
- \
- /
- ^
- {
- }
- |
$Path="C:\Windows" Get-ChildItem $Path | Where {$_.Extension -eq ".log"}
下圖是在 PowerShell ISE 撰寫程式碼時,所出現的語法提示,很清楚地看到,於輸入完 . 之後,列出所有支援的屬性。
沒有留言:
張貼留言