我正在寻找 Windows 原生 cmd 或 powershell 命令来模拟'dd'
Linux 中的相同操作。
我有 2 个合并的文件,一个附加到另一个,并且我知道开始和结束的字节指针。
在 Linux 中,我只需使用dd
并跳转到适当的指针。
我无论如何也找不到 Windows 中可以执行类似操作的本机命令。
我曾考虑过将两个文件中较小的一个放大,使它们大小完全相同,然后使用该split
命令,但 Windows 似乎也没有该命令。
Powershell | Cmd 中有任何选项吗?
请不要,我不是在寻找第三方解决方案
答案1
你可以使用 PowerShell!有很多方法可以做到这一点,但也许最清楚的方法是使用Get-Content
/gc
和Set-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
部分返回到二进制文件所需的第二部分。