2016-07-18 37 views
1

我試圖將散列函數應用於文件夾內的所有文件作爲某種版本控制。這個想法是創建一個測試文件,列出文件的名稱和生成的校驗和。挖網上我發現一些代碼,應該做的伎倆(理論上):Powershell不發送文件的正確路徑作爲參數

$list = Get-ChildItem 'C:\users\public\documents\folder' -Filter *.cab 
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 

foreach ($file in $list) { 
$return = "" | Select Name, Hash 

$returnname = $file.Name 
$returnhash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.Name))) 
$return = "$returnname,$returnhash" 

Out-File -FilePath .\mylist.txt -Encoding Default -InputObject ($return) -Append 
} 

然而,當我運行它,我得到一個錯誤,因爲它試圖讀取文件從c:\用戶\我\中,我正在運行腳本的文件夾。而文件c:\ users \ me \ aa.cab不存在,因此無法訪問。

我試過了所有我能想到但沒有運氣的東西。我使用Windows 7與Powershell 2.0,如果這有幫助的話。

回答

2

嘗試使用.FullName而不是.Name。

$returnhash = [System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file.FullName)))

+0

這樣做的伎倆。非常感謝! – Variax