嗨我试图将二进制文件存储在我写的基本批处理脚本中.基本上我希望脚本能够在某个时刻输出这个预先构建的文件,而不是从头开始创建它.
如果这是不可能的,那么我必须将该文件与批处理文件分开包含,然后将其移动到必要的位置,但我宁愿让用户看不到这个文件,这样看起来文件正在生成来自批次内.
这是可能的,如果是这样的话怎么样?提前致谢.
jeb*_*jeb 11
您可以简单地将二进制部分附加到批处理文件中COPY.
copy /a batchBin.bat + /b myBinaryFile.bin /b combined.bat
Run Code Online (Sandbox Code Playgroud)
batchBin.bat(最后一行exit /b应该以换行结束)
;;;===,,,@echo off
;;;===,,,echo line2
;;;===,,,findstr /v "^;;;===,,," "%~f0" > output.bin
;;;===,,,exit /b
Run Code Online (Sandbox Code Playgroud)
关键是findstr命令,它输出所有不以;;;===,,,.开头的行.
由于它们中的每一个都是标准的批处理分隔符,因此它们可以以任意组合为批处理文件中的任何命令添加前缀.
如果目标计算机是Vista及更高版本,则可以使用certutil.exe并创建base64编码文本,您可以将其嵌入批处理文件中.
这个例子有一个base64编码文件a single space,但是这个技术与更大的二进制文件相同.
此批处理文件使用certutil.exe到decode的证书和数据,并在一个单一的空间,没有回车或换行创建文件.
@echo off
(
echo -----BEGIN CERTIFICATE-----
echo IA==
echo -----END CERTIFICATE-----
)>file.tmp
certutil -decode file.tmp "file with a single space.txt" >nul
del file.tmp
Run Code Online (Sandbox Code Playgroud)
要encode放置到批处理文件中的程序文件,请使用这样的命令行,替换myprogram.exe为您的程序名称:
certutil -encode -f "myprogram.exe" file.tmp
Run Code Online (Sandbox Code Playgroud)
然后将file.tmp批处理文件中的内容放入:
@echo off
(
echo -----BEGIN CERTIFICATE-----
echo place the data from file.tmp here
echo as it is listed inside the file
echo -----END CERTIFICATE-----
)>file.tmp
certutil -decode file.tmp "myprogram.exe" >nul
del file.tmp
Run Code Online (Sandbox Code Playgroud)
将回声添加到每行的前面然后使用以下数据是相当容易的file2.tmp:
@echo off
for /f "delims=" %%a in (file.tmp) do >>file2.tmp (echo(echo %%a)
Run Code Online (Sandbox Code Playgroud)