阅读所有文件,更改内容,再次保存

时间:2012-08-03 10:59:36

标签: powershell

我正在尝试替换某个目录结构中所有文件的内容。

get-childItem temp\*.* -recurse |
    get-content |
    foreach-object {$_.replace($stringToFind1, $stringToPlace1)} |
    set-content [original filename]

我可以从原始的get-childItem获取文件名,以便在set-content中使用它吗?

2 个答案:

答案 0 :(得分:8)

为每个文件添加处理:

get-childItem *.* -recurse | % `
{
    $filepath = $_.FullName;
    (get-content $filepath) |
        % { $_ -replace $stringToFind1, $stringToPlace1 } |
        set-content $filepath -Force
}

关键点:

  1. $filepath = $_.FullName; - 获取文件路径
  2. (get-content $filepath) - 获取内容并关闭文件
  3. set-content $filepath -Force - 保存修改后的内容

答案 1 :(得分:5)

您只需使用$_,但每个文件周围也需要foreach-object。虽然@ akim的答案可行,但$filepath的使用是不必要的:

gci temp\*.*  -recurse | foreach-object { (Get-Content $_) | ForEach-Object { $_ -replace $stringToFind1, $stringToPlace1 } | Set-Content $_ }