Как извлечь часть двоичного файла после строки разделителя с помощью findstr? - PullRequest
0 голосов
/ 08 июня 2018

Два файла (двоичный или недвоичный) могут быть объединены в один файл определенным образом с определенной строкой-разделителем между ними, используя только консольные команды.Позже второй файл может быть извлечен следующим простым способом °, снова используя только консольные команды:

@echo off
setlocal enableextensions enabledelayedexpansion

REM === JOINING FILES ===

REM Divider.txt must consist of a line starting with "di-vi-der"
REM preceeded by at least one line and followed by a blank line.
echo This is a necessary preceeding line. > Divider.txt
echo di-vi-der This line must be followed by a blank line. >> Divider.txt

REM Join files to Joined.bin by one of these two methods:
REM copy /b FirstFile.exe + /a Divider.txt + /b File2BeExtracted.exe /b Joined.bin
type FirstFile.exe Divider.txt File2BeExtracted.exe > Joined.bin

REM === UNJOINING FILES ===

REM Get the line number of the dividing line in Joined.bin:
for /F "delims=:" %%a in ('findstr /N "^di-vi-der" "Joined.bin"') do set "lines=%%a"

REM Extract the part of the Joined.bin following the divider line:
< "Joined.bin" (

   REM Pass thru the first lines:
   for /L %%i in (1,1,%lines%) do set /P "="

   REM Copy the rest to Output.bin:
   findstr "^"

) > Output.bin

Это работает почти идеально.

Моя первая (и основная) проблема:findstr добавляет 0D 0A в конце последней строки, записанной в Output.bin.Как это можно исправить?

Вторая проблема может быть: Из-за некоторых ограничений для команды findstr (макс. Длина строк) этот метод может не работать в некоторых (редких?) Случаях.Чтобы обнаружить такие случаи, размер файла File2BeExtracted.exe может быть определен и сохранен в разделительной линии для окончательной проверки личности после извлечения файла.Как это можно сделать?

° Этот хитрый метод был изобретен jeb .См. здесь тоже.

...