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

12 浏览
0 Comments

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

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

我需要循环遍历所有文件,并删除不包含\"step4\"或\"step9\"的所有行。目前,这将创建一个新文件,但我不知道怎样在这里使用for each循环(新手)。

实际的文件名是这样的:2013 09 03 00_01_29.log。我希望输出文件要么覆盖它们,要么带有相同的名称,并追加\"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

admin 更改状态以发布 2023年5月20日
0
0 Comments

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

$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
}

甚至更简单的方法是使用foreach循环(感谢@Soapy和@MarkSchultheiss):

foreach ($f in $files){
    $outfile = $f.FullName + "out" 
    Get-Content $f.FullName | Where-Object { ($_ -match 'step4' -or $_ -match 'step9') } | Set-Content $outfile
}

0
0 Comments

尝试一下:

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')
}

0