You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用for循环保存Get-FileHash输出至文件,保留所有哈希并添加文件名?

解决方案

1. 避免覆盖文件并保留所有哈希值

你的代码每次循环调用Out-File时都会覆盖目标文件,因为默认是写入模式而非追加。有两种高效的解决方式:

方式一:使用追加模式

在Out-File后添加-Append参数,每次循环将结果追加到文件末尾:

for ($var = 0; $var -le 9999; $var++) {
    $filePath = "C:\Users\Name\Documents\Filename$var.txt"
    Get-FileHash -Path $filePath | 
        Select-Object @{Name='FileName'; Expression={Split-Path $_.Path -Leaf}}, Hash |
        Out-File -FilePath C:\Users\Name\Documents\HashFiles.txt -Append
}

方式二:先收集所有结果再一次性写入(推荐)

先将所有计算结果存入变量,最后统一写入文件,减少文件IO操作次数,性能更优:

# 收集所有哈希结果
$hashResults = for ($var = 0; $var -le 9999; $var++) {
    $filePath = "C:\Users\Name\Documents\Filename$var.txt"
    # 可选:检查文件是否存在,避免不存在的文件导致报错
    if (Test-Path -Path $filePath) {
        Get-FileHash -Path $filePath | 
            Select-Object @{Name='FileName'; Expression={Split-Path $_.Path -Leaf}}, Hash
    }
}

# 一次性写入文件
$hashResults | Out-File -FilePath C:\Users\Name\Documents\HashFiles.txt

2. 在哈希值前添加对应的文件名

通过Select-Object自定义输出属性,从Get-FileHash返回的对象中提取文件名(不含路径)并与哈希值配对:

  • @{Name='FileName'; Expression={Split-Path $_.Path -Leaf}}:创建名为FileName的属性,用Split-Path -Leaf从完整路径中提取纯文件名。
  • 如果改用Get-ChildItem批量获取文件(更简洁),可以直接用$_.Name获取文件名:
Get-ChildItem -Path "C:\Users\Name\Documents\Filename*.txt" |
    Get-FileHash |
    Select-Object @{Name='FileName'; Expression={$_.Name}}, Hash |
    Out-File -FilePath C:\Users\Name\Documents\HashFiles.txt

输出示例

最终文件HashFiles.txt的内容会类似:

FileName       Hash
--------       ----
Filename0.txt  A9993E364706816ABA3E25717850C26C9CD0D89D
Filename1.txt  7C4A8D09CA3762AF61E59520943DC26494F8941B
...

内容的提问来源于stack exchange,提问作者Brittany Broome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:36:01