将子文件夹名称导出为路径,并在不同位置为每个父子文件夹创建一个csv

时间:2020-05-28 08:32:47

标签: powershell powershell-2.0 powershell-3.0

我试图分别导出每个父文件夹的子文件夹名称(作为路径),并在不同位置为每个文件夹(1、2、3)创建一个csv。

树示例如下:

\n

我正在使用的脚本是:

C:\USERS\XXXXX\DESKTOP\TEST
├───1
│   ├───11
│   ├───111
│   └───1111
├───2
│   ├───22
│   ├───222
│   └───2222
└───3
    ├───33
    ├───333
    └───3333

问题是它将显示Test文件夹的结果,我想导出每个子文件夹的内容并在不同位置创建一个名称为csv的csv,必须对42个文件夹重复该过程,每次更改$ parentDir都很耗时。.

2 个答案:

答案 0 :(得分:0)

%{foreach( $a in (Get-ChildItem -Recurse) ){$a.FullName}} | Out-File neu.txt
Get-Content .\neu.txt | Convertto-Csv | Out-file mac.csv

我尝试过这种方式。

答案 1 :(得分:0)

如果我理解正确,那么最好使用两个Get-ChildItem命令来做到这一点:

$parentDir = "C:\USERS\XXXXX\DESKTOP\TEST"
$outputDir = "C:\USERS\XXXXX\DESKTOP"
Get-ChildItem -Path $parentDir -Force -Directory | ForEach-Object { 
    $outCsv = Join-Path -Path $outputDir -ChildPath "$($_.Name).csv"
    $_ | Get-ChildItem -Directory | Select-Object FullName | Export-Csv -Path $outCsv -NoTypeInformation
}

使用示例文件夹,这将在您的桌面上写入3个csv文件,名为1.csv2.csv3.csv,内容:

"FullName"
"D:\Test\1\11"
"D:\Test\1\111"
"D:\Test\1\1111"
"FullName"
"D:\Test\2\22"
"D:\Test\2\222"
"D:\Test\2\2222"
"FullName"
"D:\Test\3\33"
"D:\Test\3\333"
"D:\Test\3\3333"

对于旧版PowerShell,-Directory开关不可用,您应该使用

Get-ChildItem -Path $parentDir -Force | Where-Object { $_.PsIsContainer } | ForEach-Object { ... }