【问题标题】:get-content powershell commandlet is not returningget-content powershell commandlet 没有返回
【发布时间】:2014-02-08 01:16:15
【问题描述】:

我正在尝试在 Powershell 中以十六进制格式获取文件的内容,我正在使用以下内容:

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

当我运行这个脚本时,我没有收到错误,但它没有返回,它只是挂起。

有什么想法吗?

谢谢。

【问题讨论】:

  • $fullFilePath 中的文件有多大?您也可以跳过第二个ForEach-ObjectGet-Content $fullFilePath -Encoding Byte | %{ $hex += "{0:X2}" -f $_ } - 使用一些较小的文件进行测试,$hex 的填充速度非常快。使用 43MB 的 PDF 进行测试,运行时间超过两分钟。
  • 只有 67k。我确实等了更长的时间,它又回来了。谢谢您的帮助。请张贴作为答案,以便我接受。

标签: powershell powershell-2.0


【解决方案1】:

字符串连接将严重拖累性能。我会改用字符串生成器:

$hex = New-Object System.Text.StringBuilder

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

$hex = $hex.ToString()

在从串联切换到使用 stringbuilder 后,使用 125KB 文件进行测试将运行时间从 58 秒缩短到 12 秒。

【讨论】:

    【解决方案2】:

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

    get-content -encoding byte $fullFilePath | fhex
    

    【讨论】:

      猜你喜欢
      • 2014-09-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多