Windows PowerShell:Get-FileHash 和長檔案路徑

Windows PowerShell:Get-FileHash 和長檔案路徑

作業系統是Windows 10。

我使用 PowerShell 的「Get-FileHash」命令直接在其資料夾內產生檔案的 MD5 校驗和,如下所示:

PS Z:\Test> Get-FileHash 'test.txt' -algorithm MD5                                                                      
Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
MD5             D41D8CD98F00B204E9800998ECF8427E                                       Z:\Test\test.txt

但是,當涉及長檔案路徑時,PowerShell 似乎無法透過 Get-FileHash 找到該檔案。

PS Z:\Test loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong> Get-FileHash 'looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong.txt' -algorithm MD5                                                                                                                Resolve-Path : Cannot find path 'Z:\Test looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooong\looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooong.txt' because it does not exist.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Utility\Microsoft.PowerShell.Utility.psm1:11
0 char:36
+                 $pathsToProcess += Resolve-Path $Path | Foreach-Objec ...
+                                    ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Z:\Test loooooo...ooooooooong.txt:String) [Resolve-Path], ItemNotFoundE
   xception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand

另一方面,它完全能夠使用“Get-ChildItem”找到該檔案:

PS Z:\Test loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong> Get-ChildItem


    Directory: Z:\Test looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
    ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
    oooooooooooooooooooooooooong


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024-02-26     12:55              0 loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
                                                  ooooooooooong.txt

在這種情況下如何產生 MD5:s?我沒有管理權限。

答案1

\\?\您可以透過在其前面新增並使用參數來指定擴展長度路徑-LiteralPath,例如:

# local path
Get-FileHash -LiteralPath '\\?\C:\long\path\to\file.txt'

# network share
Get-FileHash -LiteralPath '\\?\UNC\server\share\folder\file.txt'

這使大多數程式接受長路徑名,並且不需要管理員權限。

在此處的答案中查看更多:https://stackoverflow.com/a/21194605/7411885

相關內容