我使用下面的批处理脚本,它将二进制部分(.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命令的一些疯狂组合来实现这一点?例如:
;;;===,,,
非常感谢提前。
答案 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
命令的正确位置。