输出多个.csv文件,在.csv文件名后面加上powershell作为源文件夹名



我有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-Objectcmdlet来处理按其所在目录分组的文件:

$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目录树中没有两个子目录具有相同的名称;如果您需要处理这样的冲突,例如在文件名中反映相对路径,用替换字符替换,则需要做更多的工作。

最新更新