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

Export sub-folder name as path and create a csv for each parent sub-folder in a different location

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

树示例如下所示:

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

我使用的脚本是:

$parentDir = "C:\Users\XXXXX\Desktop\Test";
Get-ChildItem -Recurse -Force -Depth 2 -Attribute Directory -Path $parentDir | Select-Object -Property FullName | Export-Csv Test.csv

问题是它会显示 Test 文件夹的结果,我想导出每个子文件夹的内容并在不同的位置用它们的名称创建一个 csv,这个过程必须重复 42文件夹并为每个文件夹更改 $parentDir 非常耗时..

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

我这样试过

如果我没理解错的话,使用两个 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"
"D:\Test1"
"D:\Test11"
"FullName"
"D:\Test"
"D:\Test2"
"D:\Test22"
"FullName"
"D:\Test"
"D:\Test3"
"D:\Test33"

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

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