concat二进制文件在一个省略了PowerShell的预告片

时间:2014-09-19 16:58:53

标签: powershell concat bin

我有几个二进制文件需要连接才能创建一个,每个都有预告片,但是应该省略,但结果文件应该包含一个行预告片。我试图通过创建哈希表并将数组中的每一行拆分256个字节来实现,但不知道如何按字节数拆分它。这是我尝试使用的示例代码,但对其他更有效的解决方案开放:

$ht=@{}
    filter Get-Record { if ($ht[$_] -ne $TrailerLine) {$ht[$_]} }
    $TrailerLine = $null


    get-content -path $Path\*.* -encoding byte |
    foreach { 
           if (-not $TrailerLine) 
             { $TrailerLine = $_ }

            $counter++
            $ht["$($_.split(???)"] = $_

         }

2 个答案:

答案 0 :(得分:2)

Get-Content命令有TotalCount参数可用于获取除最后256个字节之外的所有参数和Tail参数,您可以在其中获取最后256个字节,例如:

Get-ChildItem $Path | 
    Foreach {$last=$_; Get-Content $_.FullName -Encoding Byte -TotalCount ($_.Length - 256)} `
            -End {Get-Content $last.FullName -Tail 256 -Encoding Byte} | 
    Set-Content $newFile -Encoding Byte

答案 1 :(得分:0)

只是为了开始一些事情。如果你有一个字节数组,你可以将它输入Select-Object

get-content -path $Path\*.* -encoding byte | Select-Object -Index (0..255)

这将获得前256个字节。根据实际的字节数,您可以轻松地以256个块循环遍历它们,直到结束。 -Index获取参数Int32,因此这对大文件不起作用。 [int32]::MaxValue = 2147483647

如果你想要最后256个字符,你可以这样做。

$theBytes = get-content -path $Path\*.* -encoding byte
$theBytes | Select-Object -Index (($theBytes.Length - 256)..$theBytes.Length)

或者说除了最后的256之外你想要的一切。

$theBytes | Select-Object -Index (0..($theBytes.Length - 256))

注意默认情况下,PowerShell中的数组为0。我不认为我做错了但检查以确保收集或忽略的字节数量是正确的。此外,如果您的文件小于256个字节,这将导致错误。