使用 powershell 输出多个 .csv 文件并附加 .csv 文件名作为源文件夹名称
Output multiple .csv files appending the .csv file name as the source folder name with powershell
我有 30 个文件夹。每个文件夹包含 22 个 .text 文件。我正在尝试获取每个 .text 文件的文件名和行数并将其输出到 .csv 文件中,并在 .csv 文件的名称后附加每个子文件夹的名称。
我制作的脚本有效,但它会从所有子文件夹中提取所有 .text 文件并将其输出到一个 .csv 文件中。
知道如何为每个子文件夹创建一个 .csv 文件吗?
$results = Get-ChildItem "C:\Users\testserver\Documents\logfiles\*.txt" -Recurse | % { $_ | select name, @{n="lines";e={get-content $_ | measure-object -line | select -expa lines } } } | Select-Object name, lines
$results | Export-Csv "C:\Users\testserver\Documents\results.csv" -notype
使用 Group-Object
cmdlet 处理按所在目录分组的文件:
$inDir = 'C:\Users\testserver\Documents\logfiles'
$outDir = 'C:\Users\testserver\Documents'
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
目录树中没有两个子目录同名;如果您需要处理此类冲突,则需要做更多的工作,例如在文件名中反映 相对路径,将 \
替换为替代字符。
我有 30 个文件夹。每个文件夹包含 22 个 .text 文件。我正在尝试获取每个 .text 文件的文件名和行数并将其输出到 .csv 文件中,并在 .csv 文件的名称后附加每个子文件夹的名称。
我制作的脚本有效,但它会从所有子文件夹中提取所有 .text 文件并将其输出到一个 .csv 文件中。
知道如何为每个子文件夹创建一个 .csv 文件吗?
$results = Get-ChildItem "C:\Users\testserver\Documents\logfiles\*.txt" -Recurse | % { $_ | select name, @{n="lines";e={get-content $_ | measure-object -line | select -expa lines } } } | Select-Object name, lines
$results | Export-Csv "C:\Users\testserver\Documents\results.csv" -notype
使用 Group-Object
cmdlet 处理按所在目录分组的文件:
$inDir = 'C:\Users\testserver\Documents\logfiles'
$outDir = 'C:\Users\testserver\Documents'
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
目录树中没有两个子目录同名;如果您需要处理此类冲突,则需要做更多的工作,例如在文件名中反映 相对路径,将 \
替换为替代字符。