作为 PowerShell 编码的新手,我在 PowerShell 正则表达式模式中扩展变量时遇到了一些困难。
我想做的是:
- 扫描在两个时间范围内更改的日志文件
- 对于每个日志文件,我都会得到部分名称,表示它所引用的日期。
该日期存储在变量中$filedate
。然后遍历每一行日志文件每当我发现一行看起来像:
14:00:15 废话
在一个名为blabla20130620.log
I want the data line 的文件中
2013-06-20 14:00:15 废话
它应该以附加模式将输出写入文本文件(以连接不同的日志文件)
这是我到目前为止得到的(我现在正在沙箱中测试,所以没有评论等......)
$Logpath = "o:\Log"
$prevcheck="2013-06-24 19:27:14"
$currenttd="{0:yyyy-MM-dd HH:mm:ss}" -f (get-date)
$batch = 1000
[regex]$match_regex = '^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)'
If (Test-Path "$Logpath\test.txt"){
Remove-Item "$Logpath\test.txt"
}
$files=Get-ChildItem $LogPath\*.log | Where-Object { $_.LastWriteTime -ge "$prevcheck" - and $_.LastWriteTime -le "$currenttd" -and !$_.PSIsContainer }
foreach ($file in $files)
{
$filedate=$file.Name.Substring(6,4) + "-" + $file.Name.Substring(10,2) + "-" + $file.Name.Substring(12,2)
## This doesn't seem to work fine
## results look like:
## "$filedate" 14:00:15 blablabla
$replace_regex = '"$filedate" $_'
## I tried this too, but without success
## The time seems to dissappear now
## results look like:
## 2013-06-20 blablabla
#$replace_regex = iex('$filedate' + $_)
(Get-Content $file.PSPath -ReadCount $batch) |
foreach-object {if ($_ -match $match_regex) { $_ -replace $match_regex, $replace_regex} else { $_ }}|
out-file -Append "o:\log\test.txt"