簡體   English   中英

Powershell替換目錄路徑中所有文件中的特殊字符串

[英]Powershell replace special characters string in all files in directory path

我正在嘗試為我們公司剛收購的網站創建一個“查找和替換”腳本。 現在,我只是想用它來替換我們的地址和電話號碼,但我可能需要在將來定制它來替換或更新其他東西。

到目前為止,我得到的是:

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

我從The Scripting Guy那里得到 :P

但是,我需要幫助定制它。 我需要它做的是:

  • 對目錄和所有子目錄中的所有文件執行此操作 ,而不僅僅是一個文件。 據我所知,該網站是* .php文件的集合
  • 處理某些地址中出現的特殊字符 ,例如版權(©)管道(|)逗號(,)和句點(。)

這是我要替換的確切字符串(因為它出現在.php中):

<p>&#169;Copyright 2012 GSS | 48009 Fremont Blvd., Fremont, CA 94538 USA</p>

由於這可能是我的powershell工具箱中的第一個工具,任何解釋你正在添加或更改的內容都將極大地幫助我理解正在發生的事情。

獎勵積分:

  • 有什么方法可以記錄哪些文件是“查找和替換”的?

我的建議是使用ForEach循環。 在這種情況下我沒有看到需要一個函數,只需要在ForEach循環中使用代碼。 我會定義一個要搜索的字符串,以及一個要替換的字符串。 執行替換時,請確保它已被轉義。 這些方面的東西:

$TxtToFind = "<p>&#169;Copyright 2012 GSS | 48009 Fremont Blvd., Fremont, CA 94538 USA</p>"
$UpdatedTxt = "<p>&#169;Copyright 2014 | 1234 Somenew St., Houston, TX 77045 USA</p>"
$Logfile = "C:\Temp\FileUpdate.log"
ForEach($File in (GCI C:\WebRoot\ -Recurse)){
    If($File|Select-String $TxtToFind -SimpleMatch -Quiet){
        "Updating lines in $($File.FullName)" |Out-File $Logfile -append
        $File|Select-String $TxtToFind -SimpleMatch -AllMatches|Select -ExpandProperty LineNumber -Unique|Out-File $Logfile -append
        (GC $File.FullName) | %{$_ -replace [RegEx]::Escape($TxtToFind),$UpdatedTxt} | Set-Content $File.Fullname
    }
}  

您可以利用正則表達式來查找/替換您想要的字符串,以下腳本將以遞歸方式迭代所提供文件夾中的所有php文件。

function ParseFile($file){
    #Add logic to parse the file
    Write-Host $file.FullName
}

$files = Get-ChildItem -recurse C:\Path -Filter *.php

foreach ($file in $files) {
    ParseFile $file
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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