簡體   English   中英

查找和替換所有文件的PowerShell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM