修改PowerShell代码集成TREE命令遍历子文件夹并输出到CSV
修改后的代码(遍历所有子文件夹并写入CSV)
# 根目录路径 $RootDirectory = "C:\Users\User\Desktop\Folder1" # 递归获取所有子文件夹(包含根目录本身) Get-ChildItem -Recurse -Force -LiteralPath $RootDirectory -Directory | ForEach-Object { # 构造自定义对象存储文件夹核心信息 [PSCustomObject]@{ 文件夹完整路径 = $_.FullName 文件夹名称 = $_.Name 创建时间 = $_.CreationTime 最后修改时间 = $_.LastWriteTime } } | Export-Csv -Path "C:\Test_Folders.CSV" -NoTypeInformation -Encoding UTF8 -Delimiter ","
关键修改说明
- 把原代码的
-File参数替换为-Directory,精准筛选出文件夹而非文件 - 重命名初始目录变量为
$RootDirectory,避免循环中变量被覆盖导致逻辑混乱 - 调整输出属性为文件夹专属信息,你可以根据需求自行增减字段(比如要加文件夹大小,可通过
$_.GetFiles() | Measure-Object -Property Length -Sum计算) - 无需额外调用
TREE命令:PowerShell原生的Get-ChildItem -Recurse -Directory已经能稳定递归获取所有层级的子文件夹,比解析TREE的文本输出更可靠、更易维护
如果需要同时保留原文件信息和新增的文件夹信息,可以合并两类数据输出到同一CSV:
$RootDirectory = "C:\Users\User\Desktop\Folder1" # 收集文件信息 $fileData = Get-ChildItem -Recurse -Force -LiteralPath $RootDirectory -File | ForEach-Object { [PSCustomObject]@{ 类型 = "文件" 路径 = $_.FullName 名称 = $_.Name 大小 = "$([int]($_.Length / 1kb)) KB" 创建时间 = $_.CreationTime 最后修改时间 = $_.LastWriteTime } } # 收集文件夹信息 $folderData = Get-ChildItem -Recurse -Force -LiteralPath $RootDirectory -Directory | ForEach-Object { [PSCustomObject]@{ 类型 = "文件夹" 路径 = $_.FullName 名称 = $_.Name 大小 = "-" 创建时间 = $_.CreationTime 最后修改时间 = $_.LastWriteTime } } # 合并数据并导出 $fileData + $folderData | Export-Csv -Path "C:\Test_Combined.CSV" -NoTypeInformation -Encoding UTF8 -Delimiter ","
内容的提问来源于stack exchange,提问作者BigAinTX
相关产品推荐
相关产品推荐

