powershell - 不在forin循环中的变量中添加数据
问题描述
我尝试解析日志,但在forin循环中遇到了一些问题。E_ERROR 变量在循环结束后清除,但 W_ERROR var 内容数据。我做错了什么?
$PATH = "C:\inlogs"
$LOGFILES = Get-ChildItem -Include @("*.log") -Path $PATH -Recurse;
$WORKFOLDER = "C:\outlogs"
$E_ERROR = ""
$W_ERROR = ""
foreach ($LOGFILE in $LOGFILES) {
$LOGNAME = $LOGFILE.Name
Write-Host $LOGFILE
$ELOGPATH = $WORKFOLDER + "\" + $LOGFILE.Name + ".E.log"
$WLOGPATH = $WORKFOLDER + "\" + $LOGFILE.Name + ".W.log"
foreach($line in [System.IO.File]::ReadLines($LOGFILE)) {
if($line -match ',"Error",'){
$E_ERROR += $line + "`r`n"
} elseif ($line -match ',"Warning",') {
$W_ERROR += $line + "`r`n"
}
}
}
Out-File -FilePath $ELOGPATH -InputObject $EERROR -Encoding UTF8
Out-File -FilePath $WLOGPATH -InputObject $WERROR -Encoding UTF8
解决方案
这个版本应该可以按预期工作,它也
- 使用 Join-Path 构建日志文件名
- 避免双重扩展
.log.E.log
$PATH = "C:\inlogs"
$LOGFILES = Get-ChildItem -Include @("*.log") -Path $PATH -Recurse;
$WORKFOLDER = "C:\outlogs"
foreach ($LOGFILE in $LOGFILES) {
$LOGNAME = $LOGFILE.BaseName
Write-Host $LOGFILE
$ELOGPATH = Join-Path $WORKFOLDER ($LOGName+'.E.log')
$WLOGPATH = Join-Path $WORKFOLDER ($LOGName+'.W.log')
$E_ERROR = ""
$W_ERROR = ""
foreach($line in [System.IO.File]::ReadLines($LOGFILE)) {
if($line -match ',"Error",'){
$E_ERROR += $line + "`r`n"
} elseif ($line -match ',"Warning",') {
$W_ERROR += $line + "`r`n"
}
}
Out-File -FilePath $ELOGPATH -InputObject $E_ERROR -Encoding UTF8
Out-File -FilePath $WLOGPATH -InputObject $W_ERROR -Encoding UTF8
}
推荐阅读
- java - 如何在 Java 中使用泛型来更轻松地使用 JPA 存储库?
- javascript - 如何制作一个点击下拉的下拉列表?
- list - Xamarin.Android 如何从列表项中分离单词
- php - 获取 WooCommerce Ajax 上的产品 ID、名称和数量添加到购物车以显示通知
- google-maps - 在自定义谷歌地图中添加请求选项,用户可以请求管理员查看其他用户的电话号码
- python - 无法使用 Pandas 解析 JSON 文件
- html - Angular 8:动态添加 Div
- r - ggplot自定义x轴(月)被压缩/不使用整个范围
- python - 无法在 PyCharm 中导入模块,即使它已安装并且正在使用 shell 导入
- c# - ResolveAssemblyReference 任务在目标框架 4.7.2 的 VS 2017 上意外失败