1

我正在尝试使用 Windows 批处理文件将多个文件连接在一起以制作文件的单个图像。现在,我发现这可以使用 copy "copy file1+file2+file3+file4 FileConcat" 来完成,但我想做的是开始 file1 @ byte address 00,然后 start 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

感谢您的任何帮助

4

3 回答 3

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

生成.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%
于 2013-10-09T09:40:37.360 回答
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
于 2013-10-08T13:14:46.727 回答
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
于 2019-07-17T13:38:31.060 回答