PowerShell脚本开发需求:递归遍历文件夹导出含哈希与文件大小的CSV
问题原因
你的脚本在循环中依次输出MD5哈希对象、SHA1哈希对象、文件长度数值三类不同的数据。Export-CSV仅会识别第一个对象的属性(Path、Hash、Algorithm),后续的SHA1对象会覆盖原有属性,而单独的文件长度数值无法被CSV解析为有效字段,最终导致导出结果缺失文件大小信息。
修正后的脚本
# 脚本执行根目录(可替换为你需要的指定文件夹路径) $rootDirectory = $PSScriptRoot # 递归遍历文件,排除指定类型,批量生成包含完整信息的自定义对象 Get-ChildItem -Recurse -Exclude *.txt, *.ps1, *.csv -File | ForEach-Object { # 计算相对于根目录的路径 $relativePath = $_.FullName.Substring($rootDirectory.Length + 1) # 获取MD5与SHA1哈希值 $md5 = (Get-FileHash -Algorithm MD5 -Path $_.FullName).Hash $sha1 = (Get-FileHash -Algorithm SHA1 -Path $_.FullName).Hash # 获取文件大小(字节) $sizeInBytes = $_.Length # 生成包含所有需求字段的自定义对象 [PSCustomObject]@{ RelativePath = $relativePath MD5Hash = $md5 SHA1Hash = $sha1 FileSizeInBytes = $sizeInBytes } } | Export-Csv -Path "$rootDirectory\md5hashes.csv" -NoTypeInformation -Encoding UTF8
关键优化说明
- 添加
-File参数:确保只处理文件,避免遍历目录时触发Get-FileHash报错 - 统一数据结构:通过
PSCustomObject将每个文件的所有信息打包为单一对象,让Export-CSV能完整识别所有字段 - 相对路径计算:通过字符串截取生成无绝对路径的相对路径,符合需求;若需更兼容不同系统的路径格式,可替换为
$relativePath = Resolve-Path -Path $_.FullName -Relative(会生成.\开头的相对路径) - 指定UTF8编码:避免CSV文件出现中文乱码问题
内容的提问来源于stack exchange,提问作者user10413810
相关产品推荐
相关产品推荐

