DOS命令拆分二进制文件

时间:2011-04-17 13:29:57

标签: android batch-file dos

我想将二进制文件拆分成更小的块。有人知道DOS命令吗?

由于android的UNCOMPRESS_DATA_MAX约束,我不能用1MB或更大的文件覆盖数据库。因此,如果有更好的方法,我也可以。

感谢。

3 个答案:

答案 0 :(得分:1)

方法一:

makecab 可以按照自己的格式将二进制文件拆分为较小的编码块,但不能将它们仅视为原始字节,类似于平面二进制文件,例如。通过copy。但是,这些块可以通过 extrac32 连接起来。

首先制作一个ddf(文本)文件:

.Set CabinetNameTemplate=test_*.cab; <-- Enter chunk name format
.Set MaxDiskSize=900000; <-- Enter file split/chunk size
.Set ClusterSize=1000
.Set Cabinet=on;
.Set Compress=off;
.set CompressionType=LZX;
.set CompressionMemory=21
.Set DiskDirectoryTemplate=;
file.in

那么:

rem Optional: set compression on to save disk space
makecab /f ddf.txt

要取回原始文件,请确保所有块都在同一目录中:

REM join by calling 1st file in the sequence
extrac32 test_1.cab file.out

MakeCAB 引入了文件夹的概念来引用一组连续的压缩字节。

“MakeCAB 将被压缩的产品或应用程序中的所有文件,将字节放置为一个连续的字节流,压缩整个流,根据需要将其切成文件夹,然后用文件夹。”

方法 2: 对于原始字节块,powershell 可以拆分文件:

set size=1000000
set file=test.mp3

for %j in (%file%) do (
set /a chunks=%~zj/%size% >nul

for /l %i in (0,1,!chunks!) do (
set /a tail=%~zj-%i*%size% >nul
powershell gc %file% -Encoding byte -Tail !tail! ^| sc %file%_%i -Encoding byte
if %i lss !chunks! FSUTIL file seteof %file%_%i %size% >nul
)
)

然后可以通过 copy

加入这些

在 Win 10 上测试

答案 1 :(得分:0)

没有内置的DOS命令。使用dos port of the unix split command

split BIGFILE -b 1000000

有第三方替代品,但这是最简单的。

答案 2 :(得分:0)

您也可以从http://gnuwin32.sourceforge.net

安装GnuWin

对于我的工作,我需要从一个大型Oracle导出文件DataBase.bak中提取一些行。

此文件是二进制文件,由文本行和二进制行混合而成。

要提取2条特定行之间的所有行,我只输入以下命令即可

split -l 4114807 database.bak from.
split -l 10357 from.a to.
copy to.a database.RANGE.bak

第一个命令将4114807行中的所有行提取到from.B文件中的文件末尾。

在加载Notepad ++中的Database.Bak文件时,我“找到”了FROM行号。
警告:Notepad ++中显示的行号不等于l命令中使用的split参数,因为Notepad ++行号由LF以及CR个字符生成!

我使用第二条命令提取所有行,直到特定的TO行为止。

我将第一个提取的文件(to.A文件)复制到包含所需提取的新Database.RANGE.bak文件中。

作业完成后,我将从当前目录中的*和*文件全部删除。