3 回答
TA贡献1880条经验 获得超4个赞
试试看:
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')
}
TA贡献1911条经验 获得超7个赞
要获取目录的内容,可以使用
$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
}
TA贡献1786条经验 获得超12个赞
如果您需要递归地在目录中循环查找特定类型的文件,请使用以下命令,该命令将过滤所有doc
文件类型的文件
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
如果需要对多种类型进行过滤,请使用以下命令。
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
现在,$fileNames
变量充当一个数组,您可以从中循环并应用业务逻辑。
添加回答
举报