我有30个文件夹。每个文件夹包含22个.text文件。我试图获得每个。text文件的文件名和行数,并将其输出在。csv文件中,附加每个子文件夹的名称。csv文件的名称。
我所做的脚本工作,但它会从所有子文件夹中拉出所有的。text文件,并将其输出到一个单一的。csv文件。
你知道我怎样才能在每个子文件夹中创建一个。csv文件吗?
$results = Get-ChildItem "C:UserstestserverDocumentslogfiles*.txt" -Recurse | % { $_ | select name, @{n="lines";e={get-content $_ | measure-object -line | select -expa lines } } } | Select-Object name, lines
$results | Export-Csv "C:UserstestserverDocumentsresults.csv" -notype
使用Group-Object
cmdlet来处理按其所在目录分组的文件:
$inDir = 'C:UserstestserverDocumentslogfiles'
$outDir = 'C:UserstestserverDocuments'
Get-ChildItem -File -Recurse -Filter *.txt $inDir |
Group-Object DirectoryName |
ForEach-Object {
$outFile = Join-Path $outDir "results-$(Split-Path -Leaf $_.Name).csv"
$_.Group |
Select-Object Name, @{ n="Lines"; e={ (Get-Content $_.FullName | Measure-Object -Line).lines } } |
Export-Csv -NoTypeInformation $outFile
}
上面创建的输出文件如$outDir
中的results-foo.csv
,其中foo
是包含*.txt
文件的子目录的名称。
注意,假设目标$inDir
目录树中没有两个子目录具有相同的名称;如果您需要处理这样的冲突,例如在文件名中反映相对路径,用替换字符替换,则需要做更多的工作。