将文件存储在批处理文件中?

Noo*_*oob 4 batch-file

嗨我试图将二进制文件存储在我写的基本批处理脚本中.基本上我希望脚本能够在某个时刻输出这个预先构建的文件,而不是从头开始创建它.

如果这是不可能的,那么我必须将该文件与批处理文件分开包含,然后将其移动到必要的位置,但我宁愿让用户看不到这个文件,这样看起来文件正在生成来自批次内.

这是可能的,如果是这样的话怎么样?提前致谢.

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命令,它输出所有不以;;;===,,,.开头的行.
由于它们中的每一个都是标准的批处理分隔符,因此它们可以以任意组合为批处理文件中的任何命令添加前缀.

  • +1,哦 - 棘手.我想到了FINDSTR,但我一直在想弄清楚如何区分批处理脚本和二进制代码.我忘了你可以用任意数量的令牌分隔符无害地为每个脚本行添加前言.它甚至适用于标签线`;;; === ,,,:label`.非常好 (3认同)

fox*_*ive 8

如果目标计算机是Vista及更高版本,则可以使用certutil.exe并创建base64编码文本,您可以将其嵌入批处理文件中.

这个例子有一个base64编码文件a single space,但是这个技术与更大的二进制文件相同.

此批处理文件使用certutil.exedecode的证书和数据,并在一个单一的空间,没有回车或换行创建文件.

@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)