实际上我想从日志文件中提取值并将其保存在csv文件中
这是日志文件
开始时间:1990年5月17日星期五10:38:27
来源:A:\Live
Dest:X:\Copy\Dest\
文件:*
选项:/COPY:DAT/R:100000/W:3
新目录:3 W:\Live
新建文件:100.0 m randomfile.100M.xyz0.0%
列表项
0.0%
0.0%
,,,
,,、,
100%
Total Remaining copied Extracted
光盘:1 1 0 0
文件:3 3 0 0
名称:300.00 m 300.00 m 0 0
时间:0:00:47 0:00:46 0:00:00 0:00:00
速度:1224242字节/秒。速度:3233.5920兆字节/分钟。
结束时间:1990年5月11日上午11:39:15
我想获得以下格式的
开始,来源,目的地,速度,结束
1990年5月17日10时38分27秒,A:\Live,X:\Copy\Dest,1224242字节/秒,3233.5920兆字节/分钟,5月11时39分15秒19
但我得到的输出如下:
"已启动"Source"Dest"结束""速度";
,"&"2013年3月17日星期三"W";
"c">">/COPY"\测试";
,,,,
,,,
;1 1 0 0 0"3 3 0 0 0 0";"300.00 m 300.00 m 0 0 0〃"0"6703735字节/秒&"383.590兆字节/分钟&"tue May 11 39";
程序
Param($textlogfile = "Path")
$collection=@()
###trim the white spaces lines from the structured text###
$content = (gc $textlogfile ) | ? {$_.trim() -ne "" }
for($i=0;$i -lt $content.length;$i=$i+5)
{
$Started = $content[$i]
$started = $Started -split ":" |Select-Object -Index 1 |ForEach-Object Trim
$Source = $content[$i+1]
$Source = $Source -split ":" |Select-Object -Index 1 |ForEach-Object Trim
$Dest = $content[$i+2]
$Dest = $Dest -split ":" |Select-Object -Index 1 |ForEach-Object Trim
$Ended = $content[$i+3]
$Ended = $Ended -split ":" |Select-Object -Index 1 |ForEach-Object Trim
$Speed = $content[$i+4]
$Speed = $Speed -split ":" |Select-Object -Index 1 |ForEach-Object Trim
$coll = "" | select Started,Source,Dest,Ended,Speed
$coll.Started = $Started
$coll.Source = $Source
$coll.Dest = $Dest
$coll.Ended = $Ended
$coll.Speed = $Speed
$collection +=$coll
}
$collection | export-csv Path -notypeinformation
你能帮我做你想要的手术吗请帮助我,因为我是新使用powershell
PowerShell正试图对以下表达式的结果调用Trim()
:(":")[1]
,认为它是-split
操作的右侧操作数。
将整条线路更改为:
$Ended = $Ended -split ":" |Select-Object -Index 1 |ForEach-Object Trim
这样,如果$Ended
没有任何:
的(您最终只使用$null
(,就不会发生错误