如何用PowerShell将主机名与递归文件夹路径写入CSV指定列?
解决方案:生成含主机名和文件夹路径的CSV文件
嘿,我来帮你搞定这个CSV格式的问题!你之前的命令之所以会把所有内容堆在同一列,是因为你只是把主机名和文件夹列表分别追加到文件里,没有把它们配对成每行的两个字段。这里有个简洁且符合需求的PowerShell方案:
# 获取当前服务器主机名 $serverName = $env:COMPUTERNAME # 递归获取指定驱动器下的所有文件夹完整路径 $folders = Get-ChildItem -Path "G:\" -Attributes Directory -Recurse | Select-Object -ExpandProperty FullName # 构建包含Hostname和FolderPath的自定义对象集合 $csvContent = $folders | ForEach-Object { [PSCustomObject]@{ Hostname = $serverName FolderPath = $_ } } # 导出为CSV文件(去掉类型信息,使用UTF8编码避免乱码) $csvContent | Export-Csv -Path ".\folder_list.csv" -NoTypeInformation -Encoding UTF8
关键说明:
- 获取完整路径:用
FullName属性替代原来的-Name参数,这样能得到类似G:\temp\folderB的完整绝对路径,符合你预期的格式。如果需要相对路径(比如相对于G:\的路径),可以把$_换成$_.FullName.Replace("G:\", "")。 - 自定义对象配对:通过
ForEach-Object遍历每个文件夹,把主机名和当前文件夹路径绑定成一个自定义对象,这样每个对象对应CSV的一行,自动分列为两列。 - 专用CSV导出:
Export-Csv是PowerShell专门处理CSV的命令,-NoTypeInformation会移除默认的类型注释行,-Encoding UTF8确保文件在不同系统下打开不会乱码。
如果你要在本地测试(比如用.\temp\路径),只需要把Get-ChildItem的-Path参数改成对应的路径即可,生成的CSV会自动每行都是LOCAL_COMPUTERNAME,C:\your\local\path\temp\folder1这样的格式。
内容的提问来源于stack exchange,提问作者cuddlydingo
相关产品推荐
相关产品推荐

