Windows命令行将文件与偏移量连接起来

时间:2013-10-08 08:14:58

标签: windows file batch-file offset

我正在尝试使用Windows批处理文件将多个文件连接在一起,以生成文件的单个图像。现在,我发现这可以使用copy“copy file1 + file2 + file3 + file4 FileConcat”完成,但我想要做的是启动file1 @ byte address 00,然后启动file2 @ byte address 999424,start file3 @ byte address 3997696和file4 @字节地址4001536.我可以使用以下内容在Linux中执行此操作但是有没有办法在Windows中执行此操作而无需编写特定的应用程序?任何帮助,非常感谢。

set COMBINEDFILE=IMAGE/combined.srec

dd conv=notrunc bs=1 if=INPUT/FILE1.srec of=$COMBINEDFILE seek=0

dd conv=notrunc bs=1 if=INPUT/FILE2.xap of=$COMBINEDFILE seek=999424

dd conv=notrunc bs=1 if=INPUT/FILE3.html of=$COMBINEDFILE seek=3997696

dd conv=notrunc bs=1 if=INPUT/FILE4.js of=$COMBINEDFILE seek=4001536

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

我对LS_dev的回答有另一个答案,但这是基于他的答案,所以我不能相信它。我没有使用循环中的多个填充文件生成填充,而是根据所需的填充生成一个空文件,并将其附加到文件中。我不是全职程序员,所以也许这样做有“问题”。如果您使用的是win7计算机,则需要管理员权限才能运行此脚本。这是需要管理员权限才能运行的fsutil。再次感谢LS_dev

PADOUT.BAT

@ECHO OFF
IF %2.==. GOTO :Syntax
IF NOT %3.==. GOTO :Syntax
SET /A _size=1*%2
del padding.txt
SET /A _Left=%_Size%-%~z1

fsutil file createnew %cd%\padding.txt %_Left%&&goto:eof

:Syntax
ECHO generates padding file to make file specific size
ECHO Syntax: PADOUT filepath size

GENERATE.BAT

del IMAGE\combined.srec
SET COMBINEDFILE= IMAGE\combined.srec
COPY INPUT\lwip_140_echo_server.elf.srec %COMBINEDFILE%
CALL PADOUT.BAT %COMBINEDFILE% 999424-1
COPY %COMBINEDFILE%+padding.txt+INPUT\MPDU1_Read.xap /b %COMBINEDFILE%
CALL PADOUT.BAT %COMBINEDFILE% 3997696-1
COPY %COMBINEDFILE%+padding.txt+INPUT\MPDU1_ReadTestPage.html %COMBINEDFILE%
CALL PADOUT.BAT %COMBINEDFILE% 4001536-1
COPY %COMBINEDFILE%+padding.txt+INPUT\Silverlight.js %COMBINEDFILE%

答案 1 :(得分:0)

我只知道在标准批处理中附加文件的方法,没有用于截断的文件。

如果不需要截断输入文件,可以添加它们并填充它们以填充空格。

为了实现这一点,您将需要1字节大小的填充文件(1.pad)以及 - 为了提高性能 - 10,100,1000,10000和100000字节大小的填充文件。

PADFILE.BAT - 用于填充文件的实用程序批处理:

@ECHO OFF
IF %2.==. GOTO :Syntax
IF NOT %3.==. GOTO :Syntax
SET /A _size=1*%2
:CheckSize
SET /A _Left=%_Size%-%~z1
IF %_Left% LSS 0 1>&2 ECHO File already bigger than size!&TYPE 2>NUL&GOTO :EOF
IF %_Left% == 0 GOTO :EOF
IF %_Left% GEQ 100000 TYPE 100000.PAD>>%1&&GOTO:CheckSize
IF %_Left% GEQ 10000 TYPE 10000.PAD>>%1&&GOTO:CheckSize
IF %_Left% GEQ 1000 TYPE 1000.PAD>>%1&&GOTO:CheckSize
IF %_Left% GEQ 100 TYPE 100.PAD>>%1&&GOTO:CheckSize
IF %_Left% GEQ 10 TYPE 10.PAD>>%1&&GOTO:CheckSize
TYPE 1.PAD>>%1
GOTO :CheckSize
:Syntax
ECHO Pads file until desired size.
ECHO Syntax: PADFILE filepath size

现在你的命令看起来像:

SET COMBINEDFILE=IMAGE/combined.srec
COPY INPUT/FILE1.srec %COMBINEDFILE%
PADFILE.BAT %COMBINEDFILE% 999424
COPY %COMBINEDFILE%+INPUT/FILE2.xap
PADFILE.BAT %COMBINEDFILE% 3997696
COPY %COMBINEDFILE%+INPUT/FILE3.html
PADFILE.BAT %COMBINEDFILE% 4001536
COPY %COMBINEDFILE%+INPUT/FILE4.js

请注意,至少1.PAD应放在与PADFILE.BAT相同的文件夹中。

要从.PAD快速创建其他1.PAD文件,您可以使用:

(FOR /L %I IN (1,1,10) DO @TYPE 1.PAD)>10.PAD
(FOR /L %I IN (1,1,10) DO @TYPE 10.PAD)>100.PAD
(FOR /L %I IN (1,1,10) DO @TYPE 100.PAD)>1000.PAD
(FOR /L %I IN (1,1,10) DO @TYPE 1000.PAD)>10000.PAD
(FOR /L %I IN (1,1,10) DO @TYPE 10000.PAD)>100000.PAD

答案 2 :(得分:0)

在LS_DE提供的批处理文件脚本的开头添加以下代码时。然后,除了此批处理文件外,您无需创建其他任何文件。如果文件已经创建。

此代码创建了长度为“空”的PAD文件。 我已经验证它可以正常工作。

fsutil file createnew %~dp01.PAD 1
fsutil file createnew %~dp010.PAD 10
fsutil file createnew %~dp0100.PAD 100
fsutil file createnew %~dp01000.PAD 1000
fsutil file createnew %~dp010000.PAD 10000
fsutil file createnew %~dp0100000.PAD 100000