Я использую приведенный ниже пакетный скрипт, который имеет двоичную часть (.exe-программу), которая добавляется к нижней части скрипта. Я использовал этот трюк, чтобы прикрепить бинарную часть моего пакетного сценария:Как извлечь двоичные данные из командного файла с помощью команды findstr?
::Append binary part to your batch file with COPY
copy /y /a "batchscript.bat" + /b program.exe /b combined.bat
Для того, чтобы извлечь двоичную часть из пакетного сценария (combined.bat), я использую следующий метод с командой «Findstr»:
;;;===,,, @ECHO OFF
;;;===,,, SETLOCAL ENABLEEXTENSIONS
;;;===,,,
;;;===,,, echo test line1
;;;===,,, echo test line2
;;;===,,,
;;;===,,, findstr /v "^;;;===,,," %~f0 > program.exe
;;;===,,,
;;;===,,, echo test line3
;;;===,,, echo test line4
;;;===,,, exit /b
;;;===,,, ::Below are binary data for program.exe
binarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinary
binarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinary
...
так что этот кусок кода извлекает бинарная часть из сценария program.exe:
findstr /v "^;;;===,,," %~f0 > program.exe
Но как вниз стороны, каждая строка часть сценария должна начинаться с префикса следующий
;;;===,,,
То, что я хочу сделать, это использовать префикс «;;; === ,,,» только в последней строке кода и извлечь все двоичные данные после этой строки. Можно ли достичь этого через какую-то сумасшедшую комбинацию findstr + для loop + if command? Пример:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
echo test line1
echo test line2
HERE IS THE CODE TO EXTRACT BINARY PART AFTER LAST SCRIPT LINE
echo test line3
echo test line4
exit /b
;;;===,,, ::Below are binary data for program.exe
binarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinary
binarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinarybinary
...
Большое спасибо заранее.
Спасибо за ответ, к сожалению, ваше решение не работает. Скрипт застревает и показывает сообщения об ошибках (FINDSTR: Строка XXXX слишком длинная.), Мне нужно закончить ее ctrl + break. Файл program.exe создается частично, однако его данные не соответствуют двоичным данным в пакетном файле. Таким образом, ваш код пропускает первые строки сценария, но двоичные данные не копируются правильно. Странно, когда оба кода функционально эквивалентны, потому что мой код «findstr» отлично работает на одном и том же командном скрипте и одинаковых двоичных данных. –
Ops! Я просто понял, что когда команда 'findstr' считывает строки с перенаправленного ввода, макс. длина ограничена 8 КБ, поэтому оба метода не эквивалентны! Подробнее см. [Здесь] (http://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman). – Aacini