如何重复给定HEX字符串

imi*_*a k 2 bash hex batch-file repeat

假设我有一个7字节的文件,名为test.dat.如果我用HEX编辑器打开test.dat,代码将是

1F 2E 3D 4C 5B 6A 70

(代码没有重大意义.只是为了测试!)

现在,我想要生成7000000字节文件,它可能被称为milliontest.dat,通过重复此十六进制代码1000000次.欢迎批量或bash.

感谢你们对我的帮助!

Ein*_*969 5

简易路

@echo off    
(
For /l %%n in (1,1,1000000) do copy milliontest.dat /B + test.dat /B milliontest.dat /B
) >nul 2>nul
Run Code Online (Sandbox Code Playgroud)

快速路

这项工作非常快(在我的旧机器上0.2秒),它是纯dos批量解决方案.

@echo off

setlocal EnableDelayedExpansion

>test.dat set /p ".=1234567" <nul
copy test.dat /B tmp.dat >nul

set Times=1000000

(
 for /l %%n in (1,1,31) do (
    set /A "bit=Times %% 2, Times/=2"
    If !bit! equ 1 copy milliontest.dat /B + tmp.dat /B milliontest.dat /B
    if !Times! gtr 0 (
        copy tmp.dat /B + tmp.dat /B tot.dat /B 
        del tmp.dat
        ren tot.dat tmp.dat
    ) >nul 2>nul
 )
) > milliontest.dat

del tmp.dat

exit /b
Run Code Online (Sandbox Code Playgroud)

正如Aacini所说,我解释了这种方法.这个方法如何将文件test.dat的字节乘以一百万.这使用了Bynary乘法.

"在基数2中,长乘法减少到几乎无关紧要的操作.对于乘法器中的每个'1'位,将被乘数移位适当的量然后对移位的值求和.根据计算机处理器架构和乘数的选择,它可能是使用硬件位移代码编写此算法的速度更快,并且当乘数固定且所需的加法数量很小时,增加而不是依赖于乘法指令.

更简单的方法

这样可以减少复制命令的数量.每10个副本重用一次结果.为了达到结果,这个使用6个周期,一个百万,因为零个数是6.

copy test.dat /B tmp.dat >nul /B
copy tmp.dat /B milliontest.dat /B 

For /l %%d in (1,1,6) do (
  For /l %%n in (1,1,9) do copy milliontest.dat /B + tmp.dat /B milliontest.dat /B
  copy milliontest.dat /B tmp.dat /B
) >nul
Run Code Online (Sandbox Code Playgroud)

为了加倍文件我已探测使用:

type tmp.dat>>tmp.dat
Run Code Online (Sandbox Code Playgroud)

但是出现错误,而不是我使用COPY.

编辑:用COPY Always替换TYPE命令.TYPE适用于文本文件.