我有几个二进制文件需要连接才能创建一个,每个都有预告片,但是应该省略,但结果文件应该包含一个行预告片。我试图通过创建哈希表并将数组中的每一行拆分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(???)"] = $_
}
答案 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个字节,这将导致错误。