使用PowerShell循环遍历目录中的文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (70)

如何更改以下代码以查看目录中的所有.log文件,而不仅仅是一个文件?

我需要循环遍历所有文件并删除不包含“步骤4”或“步骤9”的所有行。当前,这将创建一个新文件,但我不确定如何使用for each在这里循环。

我希望输出文件要么覆盖它们,要么用“Out”作为同名。

$In = "C:\Users\gerhardl\Documents\My Received Files\Test_In.log"
$Out = "C:\Users\gerhardl\Documents\My Received Files\Test_Out.log"
$Files = "C:\Users\gerhardl\Documents\My Received Files\"

Get-Content $In | Where-Object {$_ -match 'step4' -or $_ -match 'step9'} | `
Set-Content $Out
提问于
用户回答回答于

试试看:

Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files" -Filter *.log | 
Foreach-Object {
    $content = Get-Content $_.FullName

    #filter and save content to the original file
    $content | Where-Object {$_ -match 'step[49]'} | Set-Content $_.FullName

    #filter and save content to a new file 
    $content | Where-Object {$_ -match 'step[49]'} | Set-Content ($_.BaseName + '_out.log')
}
用户回答回答于

若要获取可以使用的目录的内容,请使用

$files = Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\"

然后,也可以循环这个变量:

for ($i=0; $i -lt $files.Count; $i++) {
    $outfile = $files[$i].FullName + "out" 
    Get-Content $files[$i].FullName | Where-Object { !($_ -match 'step4' -or $_ -match 'step9') } | Set-Content $outfile
}

扫码关注云+社区