如何在 Win CMD 上删除二进制文件中的前导空字节?此文件可能是文件拆分或截断的结果,其中空字节是(较大)父文件中文件边界的指示器。
答案1
最安全的方法是使用十六进制编辑器,例如免费的 氢键。
这个(未经测试的)PowerShell 脚本也可以执行此操作:
$file = "C:\path\to\file"
$Bytes = [IO.File]::ReadAllBytes($file)
$i = 0
While ($i < $Bytes.Length -and $Bytes[$i] -eq 0) { $i++ }
$Bytes = $Bytes[$i..($Bytes.Length-1)]
[IO.File]::writeAllBytes($file, $bytes)
答案2
与 EOF 不同,Win CMD 上的批处理脚本没有可用的文件开头指示符,因为它无法直接访问 MFT 或 FAT。可以通过读取文件本身来访问文件的前几个字节,或者使用 截断(保留)文件的第一部分fsutil
。
CMD 中没有实用程序或命令来保留/提取文件的后半部分。一种解决方法是进行十六进制转储,删除冗余字节,然后将certutil
剩余forfiles
部分返回到所需的二进制文件。
提取文件第二部分的 powershell 解决方案(不包含前导冗余字节/空值):
powershell gc <file> -Encoding byte -Tail <size> ^| sc <out> -Encoding byte