我一直在使用以下命令来获取目录(及其所有子目录)中所有文件的MD5哈希值:
Get-FileHash -Algorithm MD5 -LiteralPath (Get-ChildItem "*.*" -Recurse)
但是,我意识到一些子目录具有不带文件扩展名的文件。
以下两个命令之间有什么区别,并且是获取目录中所有文件(包括不带文件扩展名的文件)的好方法吗?对于我的测试目录,它们的输出似乎相同,但是只有第一个作为Get-FileHash
cmdlet的输入。
Get-ChildItem "*" -Recurse
Get-ChildItem -Recurse | where {!$_.PsIsContainer}
编辑:谢谢Mathias,它们似乎都可以与Get-FileHash
一起使用(包括没有文件扩展名的文件以及文件名中带有方括号的文件):
Get-FileHash -Algorithm MD5 -LiteralPath (Get-ChildItem "*" -Recurse)
Get-ChildItem -Recurse | where {!$_.PsIsContainer} | Get-FileHash -Algorithm MD5
答案 0 :(得分:0)
它有助于发布错误消息。如果您真的想用这种方法,那就可以用。这是PS 5令人讨厌的问题的一部分,其中get-childitem返回的字符串版本不是完整路径。奇怪的是*。*返回完整路径。一种解决方法是在此之后将其通过管道传递到get-item。
get-filehash -Algorithm MD5 -LiteralPath (Get-ChildItem -Recurse | get-item |
where {!$_.PsIsContainer})
另一种方式。 Get-ChildItem现在具有-File选项。并获取全名。
get-filehash -Algorithm MD5 -LiteralPath (Get-ChildItem -Recurse -File).fullname
问题的简单演示:
get-childitem * -recurse | foreach-object { "$_" }
foo2
hi.doc
hi2.doc
get-childitem *.* -recurse | foreach-object { "$_" }
C:\Users\js\foo\foo2\hi2.doc
C:\Users\js\foo\hi.doc