![](/img/trans.png)
[英]PowerShell Script to Find and Replace for all Files with a Specific Extension
[英]PowerShell Script to Find and Replace for all Files
我在C:\\Foo
文件夾和子文件夾中有許多.cmd
和.ps1
文件,在該文件夾和子文件夾中的所有文件中,我都需要用不區分大小寫的 “ Chocolate ”替換“ vanilla ”一詞。
這是我的方法:
Get-ChildItem C:\Foo *.cmd *.ps1 -recurse |
Foreach-Object {
$c = ($_ | Get-Content)
$c = $c -replace 'vanilla','chocolate'
[IO.File]::WriteAllText($_.FullName, ($c -join "`r`n"))
}
我僅使用[IO.File]::WriteAllText
是因為Set-Content
在末尾添加了新行(盡管我不知道為什么)。
問題是它會打開並寫入所有文件,甚至是不包含單詞“ vanilla ”的文件,因此會修改所有文件的時間戳。 我如何改進腳本,使其只對通過replace
操作已更改的文件(即包含“ vanilla ”一詞的文件) WriteAllText
?
您只需要一個if
語句來檢查文件中是否存在“ vanilla”:
Get-ChildItem C:\Foo *.cmd *.ps1 -recurse |
Foreach-Object {
$c = ($_ | Get-Content)
if(($c -join "").contains("vanilla")){
$c = $c -replace 'vanilla','chocolate'
[IO.File]::WriteAllText($_.FullName, ($c -join "`r`n"))
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.