我有一种情况,我需要为每个文件夹写一个输出文件,每个文件夹中包含数据/信息。
文件夹/目录结构:
C:Logs15SecRef.DataMonthLog.JanDay.1
~Month~ have folders up to Log.Dec
~Log.Jan~ has a folder for 30/31 Days in a month
~Day.1~ has files with data
我能做到的:
我可以使用一个脚本在一个月的所有日子读取数据,并可以将信息写入CSV文件。感谢@zett42。
在给定的文件夹/目录结构下可以正常工作-
C:Logs15SecRef.DataMonthLog.Jan
脚本:
$targDir = "C:Logs15SecRef.DataMonth";
$subDir = $(Get-ChildItem "$targDir" –Directory );
foreach($sub in $subDir) {
Get-ChildItem -Path $sub –Recurse *.log |
Select-Object -Property @(
'FullName'
@{ Name = "LineCount"; Expression = {
(Get-Content -Path $_.FullName | Select-Object -Skip 8 | Measure-Object).Count
}}
) |
Export-Csv C:testoutput.csv -NoTypeInformation
}
问题:
当尝试在更高的文件夹/目录结构下运行脚本时,即
C:Logs15SecRef.DataMonth
脚本只写入Month中最后一个文件夹的Output文件,例如Log.May。所有其他文件夹(日志。1月,日志。2月等日的信息将不予填写。我不知道如何做到这一点,也无法在互联网上找到正确的帮助。
期望:每个月都有一个单独的文件,带有月份的名称(Log.Jan.csv, Log.Feb.csv)。
您的脚本目前每个月都会写入的输出,但也会在每次循环迭代时重写它—这就是为什么您只能看到上个月的数据。因此,您只需要更新输出路径,以便从当前月份的目录中获取名称。
将导出定义更改为:
Export-Csv "C:test$($sub.Name).csv" -NoTypeInformation