使用PowerShell循环遍历目录中的文件
使用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日
要获取目录的内容,您可以使用
$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 }
尝试一下:
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') }