2014-02-07 37 views
2

我想獲得一個文件在PowerShell中十六進制的內容,我現在用的是以下幾點:獲取內容的PowerShell命令行沒有返回

get-content -encoding byte $fullFilePath | %{"{0:X2}" -f $_} | %{$hex = $hex + $_} 

當我運行該腳本,我不明白一個錯誤,但它不會返回,它只是掛起。

任何想法?

謝謝。

+1

多大是'$ fullFilePath'文件?你可以跳過第二個'ForEach-Object':'Get-Content $ fullFilePath -Encoding Byte | %{$ hex + =「{0:X2}」-f $ _}' - 用幾個較小的文件進行測試,'$ hex'很快填充。使用43MB PDF進行測試,並且已運行超過兩分鐘。 – jscott

+0

只有67k。我確實等了很久,然後回來了。謝謝您的幫助。請發帖作爲答案,以便我可以接受它。 – Sako73

回答

3

該字符串連接將是一個嚴重的性能拖動。我切換到使用一個StringBuilder:

$hex = New-Object System.Text.StringBuilder 

get-content -encoding byte $fullFilePath | 
%{"{0:X2}" -f $_} | %{$hex.Append($_) > $null} 

$hex = $hex.ToString() 

測試用125KB的文件,從串聯切換到使用StringBuilder後下降的運行時間從58秒12。

3

如果你碰巧使用PowerShell Community Extensions,它有一個Format-Hex命令(化名fhex)例如: -

get-content -encoding byte $fullFilePath | fhex