我尝试编写一个Windows PowerShell脚本。我需要获取目录树中所有文件的文件哈希值。
这是我到目前为止得到的:
Get-ChildItem -Path "c:\temp\path" -Recurse -Force -Attributes !Directory | % {Get-FileHash $_.Fullname} | Out-File "c:\temp\report_file.txt"
文件 c:\temp\report_file.txt
是这样的:
Algorithm Hash Path
--------- ---- ----
SHA256 E3B0C44298...E4649B934CA495991B7852B855 c:\temp\path\report1.txt
SHA256 7B989C1C95...6756624B3887E501DCC377DB23 c:\temp\path\report2.txt
SHA256 EA0155401C...A6D44F1DEBB95E401AEFF4F908 c:\temp\path\report3.txt
SHA256 06DAA0E452...32E3F3104EA4564EAB67CA6A0A c:\temp\path\report4.txt
**SHA256 9C7C9FEA96...45F460BA9015C8F0A5CA830B6B c:\temp\path\report5.txt**
一切都正常。
期望结果:
我每天都要运行这个命令。在这个目录树中,文件会不时地被删除和重新创建。然而有时候输出文件中的文件顺序会发生变化。
在下面的例子中,report文件中的report5.txt
应该在最后一行,但它却在第二行。我猜测这是因为选了递归选项造成的。递归选项对我很重要。当我在没有子目录的目录上运行命令时,结果总是相同的。但是当在包含子目录(目录树)的目录上运行时,结果就不同了。
Algorithm Hash Path
--------- ---- ----
SHA256 E3B0C44298...E4649B934CA495991B7852B855 c:\temp\path\report1.txt
**SHA256 9C7C9FEA96...45F460BA9015C8F0A5CA830B6B c:\temp\path\report5.txt**
SHA256 7B989C1C95...6756624B3887E501DCC377DB23 c:\temp\path\report2.txt
SHA256 EA0155401C...A6D44F1DEBB95E401AEFF4F908 c:\temp\path\report3.txt
SHA256 06DAA0E452...32E3F3104EA4564EAB67CA6A0A c:\temp\path\report4.txt
在输出到报告文件之前,有没有一种方法可以按列fullpath对所有数据进行排序的解决方案?