拆分或复制文件跳过字节数

拆分或复制文件跳过字节数

我正在寻找 Windows 原生 cmd 或 powershell 命令来模拟'dd'Linux 中的相同操作。

我有 2 个合并的文件,一个附加到另一个,并且我知道开始和结束的字节指针。

在 Linux 中,我只需使用dd并跳转到适当的指针。

我无论如何也找不到 Windows 中可以执行类似操作的本机命令。

我曾考虑过将两个文件中较小的一个放大,使它们大小完全相同,然后使用该split命令,但 Windows 似乎也没有该命令。

Powershell | Cmd 中有任何选项吗?

请不要,我不是在寻找第三方解决方案

答案1

你可以使用 PowerShell!有很多方法可以做到这一点,但也许最清楚的方法是使用Get-Content/gcSet-Content/sc移动字节。假设我们有一个merged.ext文件,其中前 100 个字节是一个文件,其余的是另一个文件:

$bytes = gc .\merged.ext -Encoding Byte -Raw
sc .\part1.ext ([byte[]]($bytes | select -First 100)) -Encoding Byte
sc .\part2.ext ([byte[]]($bytes | select -Skip 100)) -Encoding Byte

奇怪的是,Set-Content当使用字节时(-Encoding Byte)希望它的输入正好是一个字节数组,而不仅仅是一个恰好包含字节的序列,因此我们需要明确转换为byte[]

答案2

与 EOF 不同,Win CMD 上的批处理脚本没有可用的文件开头指示符,因为它无法直接访问 MFT 或 FAT。可以通过读取文件本身来访问文件的前几个字节,或者使用 截断(保留)文件的第一部分fsutil

REM Raw binary split first part of file
FSUTIL file seteof <file> <size>

CMD 中没有实用程序或命令来保留/提取文件的后半部分。一种解决方法是进行十六进制转储,删除前几个字节,然后将certutil剩余forfiles部分返回到二进制文件所需的第二部分。

相关内容