2014-02-07 32 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