如何用PowerShell生成哈希:相对路径格式的.info校验文件
实现方案
直接使用字符串拼接输出纯文本内容即可,避免PowerShell对象格式化带来的多余表头、字段问题,完整脚本如下:
# 请先修改为你的实际工作根目录 $WorkPath = "替换为你的目标根目录完整路径" $outputPath = Join-Path $WorkPath "us\update.info" # 遍历文件计算哈希并输出指定格式内容 Get-ChildItem -Path $WorkPath -Recurse -Force -File | ForEach-Object { $sha1Hash = (Get-FileHash -Path $_.FullName -Algorithm SHA1).Hash # 计算相对路径,如需保留Windows反斜杠格式可删除.Replace('\', '/') $relativePath = $_.FullName.Replace($WorkPath, '').TrimStart('\', '/').Replace('\', '/') # 按要求拼接字符串 "${sha1Hash}:${relativePath}" } | Out-File -FilePath $outputPath -Encoding UTF8
关键说明
- Get-ChildItem添加
-File参数仅处理文件,避免文件夹计入结果 - 直接输出拼接后的纯字符串,不会产生任何表头、多余字段
- 编码可根据你的解析器要求调整,如使用系统默认编码可将
-Encoding UTF8修改为-Encoding Default - 如需保留路径的反斜杠格式,删除相对路径处理逻辑中的
.Replace('\', '/')即可
原脚本问题说明
- 第一版脚本仅提取了哈希值属性,未保留路径信息,因此无法拼接路径内容
- 第二版脚本直接将Select-Object返回的对象输出到文件,PowerShell会默认输出格式化后的表格内容,因此会出现表头等多余元素
内容的提问来源于stack exchange,提问作者Pring
相关产品推荐
相关产品推荐

