android - 用于分割二进制文件的 Windows 命令

标签 android windows batch-file cmd

我想将二进制文件拆分成更小的 block 。任何人都知道一个Windows命令吗?
由于 Android 的 UNCOMPRESS_DATA_MAX 约束,我无法用 1MB 或更大的文件覆盖数据库。因此,如果有更好的方法可以做到这一点,我也可以。

最佳答案

方法一:makecab可以将二进制文件以自己的格式拆分成更小的编码 block ,但不能将它们仅视为原始字节,类似于平面二进制文件,例如。通过 copy .然而,这些 block 可以通过 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
要取回原始文件,请确保所有 block 都在同一目录中:
REM join by calling 1st file in the sequence
extrac32 test_1.cab file.out
MakeCAB引入了文件夹的概念来指代一组连续的压缩字节。
“MakeCAB 获取产品或应用程序中被压缩的所有文件,将字节放置为一个连续的字节流,压缩整个流,根据需要将其分割到文件夹中,然后用文件夹填充一个或多个文件柜。 "
方法二:
对于原始字节 block ,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
)
)
方法三:通过 certutil & CMD:
set file="x.7z"             &REM compressed to generate CRLF pairs
set max=70000000            &REM certutil has max file limit around 74MB

REM Findstr line limit 8k
REM Workaround: wrap in some archive to generate CRLF pairs

for %i in (%file%) do (
set /a num=%~zi/%max% >nul      &REM No. of chunks
set /a last=%~zi%%max% >nul     &REM size of last chunk
if %last%==0 set /a num=num-1       &REM ove zero byte chunk
set size=%~zi
)

ren %file% %file%.0

for /l %i in (1 1 %num%) do (
set /a s1=%i*%max% >nul
set /a s2="(%i+1)*%max%" >nul
set /a prev=%i-1 >nul

echo Writing %file%.%i
type %file%.!prev! | (
  (for /l %j in (1 1 %max%) do pause)>nul& findstr "^"> %file%.%i)

FSUTIL file seteof %file%.!prev! %max% >nul
)
if not %last%==0 FSUTIL file seteof %file%.%num% %last% >nul
echo Done.
备注:
  • 可以通过 copy /b 加入 block
  • 通过填充 block 编号可以使文件扩展名更整洁
  • 可以循环分割整个目录

  • 请参阅下面的示例输出:
    Directory of C:\Users\Stax\Desktop\Parking
    
    03/05/2022  01:04    <DIR>          .
    03/05/2022  01:04    <DIR>          ..
    03/05/2022  01:04               407 Court Notice.pdf.000
    03/05/2022  01:04             4,000 Court Notice.pdf.001
    03/05/2022  01:04             4,000 Court Notice.pdf.002
    03/05/2022  01:04               557 Parking fine.pdf.000
    03/05/2022  01:04             4,000 Parking fine.pdf.001
    03/05/2022  01:04             4,000 Parking fine.pdf.002
    03/05/2022  01:04             4,000 Parking fine.pdf.003
    03/05/2022  01:04             4,000 Parking fine.pdf.004
                   8 File(s)         24,964 bytes
    
    然后可以通过 copy 加入方法 2 和 3
    在 Win 10 上测试

    关于android - 用于分割二进制文件的 Windows 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693795/

    相关文章:

    c++ - 使用下标运算符的整数 vector 元素比较失败,但使用 at 函数成功

    windows - ffmpeg 没有从批处理脚本中正确使用通配符

    windows - 递归地批量重命名文件扩展名(windows批处理)

    android - 无法使用 react-native 在 Android 上呈现具有绝对位置的 View

    Android galaxy 选项卡选项菜单不同?

    java - 无法检测现有电话号码

    string - 如何将包含特定字符串的行的行号存储在环境变量中的文本文件中?

    java - 如何在Android Studio中添加多个声音按钮?

    c - "u16_t *"类型的参数与 "u16_t [2]*"类型的参数不兼容 - uIP 库

    windows - 在c/c++中使用检查函数编译Windows NT命令行代码循环