我正在尝试替换某个目录结构中所有文件的内容。
get-childItem temp\*.* -recurse |
get-content |
foreach-object {$_.replace($stringToFind1, $stringToPlace1)} |
set-content [original filename]
我可以从原始的get-childItem获取文件名,以便在set-content中使用它吗?
答案 0 :(得分:8)
为每个文件添加处理:
get-childItem *.* -recurse | % `
{
$filepath = $_.FullName;
(get-content $filepath) |
% { $_ -replace $stringToFind1, $stringToPlace1 } |
set-content $filepath -Force
}
关键点:
$filepath = $_.FullName;
- 获取文件路径(get-content $filepath)
- 获取内容并关闭文件set-content $filepath -Force
- 保存修改后的内容答案 1 :(得分:5)
您只需使用$_
,但每个文件周围也需要foreach-object
。虽然@ akim的答案可行,但$filepath
的使用是不必要的:
gci temp\*.* -recurse | foreach-object { (Get-Content $_) | ForEach-Object { $_ -replace $stringToFind1, $stringToPlace1 } | Set-Content $_ }