PowerShell - 使用 -Recurse 和 -Filter 附加到目录中的所有文件

PowerShell - Using -Recurse and -Filter to append to all files in a directory

我正在尝试查找目录及其所有 child 文件夹中的所有 .aspx 文件,以便我可以在 <head> 标签下添加标签。 Parent 个目录可能包含 .aspx 个文件以及 child 个文件夹。

换句话说,我希望 select 该目录中的所有 .aspx 文件以及其 child 文件夹中的所有 .aspx 文件,所有 .aspx 文件在那些 children 等的 children 中。我正在使用以下 PowerShell 代码片段来执行此操作:

$files = Get-ChildItem -Path C:\Users\apgdy\Downloads\test_proj -recurse -filter "*.aspx"

当我 运行 在 PowerShell 控制台中显示 $files 的内容时,我得到了我希望在屏幕缓冲区中显示的所有文件。但是,当我尝试使用以下代码向文件添加文本时,出现错误:

代码:

$textIsAddedAfter = "<head>"
$textToAdd = "    <sometag>"

ForEach ($file in $files) {
(Get-Content $file) |
Foreach-Object {
    $_
    if($_ -match $textIsAddedAfter) {
        $textToAdd
    }
} | 
Set-Content $file
}

错误:

Get-Content : cannot find path 'C:\users\apgdy\test.aspx' because it does not exist.
At line:2 char:17
+     <Get-Content <<<<  $file> |
     + CategoryInfo         : ObjectNotFound: <C:\Users\apgdy\test2.aspx:String
    > [Get-Content], ItemNotFoundException
     + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCo
ntentCommand

我为它在 $files 中找到的每个文件获取其中一个 奇怪的是,在代码中,我告诉控制台文件存在于 "C:\users\apgdy\Downloads\test_proj" 及其 children 中,而不是 "C:\users\apgdy" 中。为什么它从我告诉它查找文件的目录中省略了 "\Downloads\test_proj"

提前致谢!

当您调用 Get-Content 时,它没有使用完整的文件路径。更改自:

Get-Content $file

收件人:

Get-Content $file.FullName

或者:

$file | Get-Content