如何使用findstr命令从批处理文件中提取二进制数据?

时间:2015-11-05 10:17:03

标签: loops batch-file binary findstr

我使用下面的批处理脚本,它将二进制部分(.exe程序)附加到脚本的底部。我使用这个技巧将二进制部分附加到我的批处理脚本:

[264 264 79]

为了从批处理脚本(combined.bat)中提取二进制部分,我使用以下方法和“findstr”命令:

::Append binary part to your batch file with COPY
copy /y /a "batchscript.bat" + /b program.exe /b combined.bat

因此,这段代码将脚本中的二进制部分提取到program.exe:

;;;===,,, @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
...

但作为一个缺点,脚本部分的每一行必须以下面的前缀

开头
findstr /v "^;;;===,,," %~f0 > program.exe

我想要做的是只在最后一行代码中使用前缀“;;; === ,,,”并在此行之后提取所有二进制数据。是否有可能通过findtr + for loop + if命令的一些疯狂组合来实现这一点?例如:

;;;===,,,

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

@echo off
setlocal

rem Get the line number of the dividing line
for /F "delims=:" %%a in ('findstr /N "^;;;===,,," "%~F0"') do set "lines=%%a"

rem Extract the binary part from this file
< "%~F0" (

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

   rem Copy the rest
   findstr "^"

) > program.exe
goto :EOF

;;;===,,, ::Below are binary data for program.exe

此程序功能上等同于代码,也就是说,当程序失败时,该程序将失败。您应该知道findstr命令可以在所有情况下成功复制二进制数据。

此解决方案充分利用了findstr命令不会移动重定向输入文件的文件指针的事实,该文件指针位于先前set /P命令的正确位置。