トッカンソフトウェア

PowerShell Grepして置換



Grepして置換するサンプルを作ってみました。

Grepして置換

$basePathに対象フォルダ、$fromに変更元文字、$toに変更先文字を指定します。
ファイルの文字コードはUTF8を指定しています。
.txtファイルのみを対象としています。

$basePath = "C:\work\powershell"
$from = "変更元"
$to = "変更先"

$listA = Get-ChildItem $basePath -Filter *.txt -Recurse | Select-String $from -Encoding UTF8
# $listA = Get-ChildItem $basePath -Filter *.txt -Recurse | Select-String $from -Encoding Default

$ary = @()
$encoding = New-Object System.Text.UTF8Encoding $False
# $encoding = [Text.Encoding]::GetEncoding(932)

foreach ($obj in $listA) {

    if ($ary.Contains($obj.Path) -eq $False) {
        $ary += ($obj.Path)
    }
}

foreach ($path in $ary) {
    Write-Output $path

    $data = [System.IO.File]::readAllLines($path, $encoding)
    $data = $data | ForEach-Object { $_ -replace $from, $to }
    [System.IO.File]::WriteAllLines( $path, $data, $encoding)
}



ページのトップへ戻る