我正在尝试使用批处理制作安装程序。当然,安装程序需要包含将要安装的文件,因此我正在考虑在base64中对文件进行编码,然后将其解码并写入目标位置。
当然,如果Windows拥有base64
Linux盒子中包含的工具,我的工作将非常容易。但是,由于根本不存在,有没有办法使用批处理文件完全解码base64内容?我将如何做到这一点?
任何帮助表示赞赏。
(这只是一个实验,因此我不必担心效率低下之类的问题。)
我正在尝试使用批处理制作安装程序。当然,安装程序需要包含将要安装的文件,因此我正在考虑在base64中对文件进行编码,然后将其解码并写入目标位置。
当然,如果Windows拥有base64
Linux盒子中包含的工具,我的工作将非常容易。但是,由于根本不存在,有没有办法使用批处理文件完全解码base64内容?我将如何做到这一点?
任何帮助表示赞赏。
(这只是一个实验,因此我不必担心效率低下之类的问题。)
Answers:
实际上Windows确实有一个可对base64进行编码和解码的实用程序-CERTUTIL
我不确定哪个版本的Windows引入了此命令。
编码文件:
certutil -encode inputFileName encodedOutputFileName
解码文件:
certutil -decode encodedInputFileName decodedOutputFileName
CERTUTIL有许多可用的动词和选项。
要获取几乎所有可用动词的列表:
certutil -?
要获得有关特定动词(例如-encode)的帮助,请执行以下操作:
certutil -encode -?
要获得几乎所有动词的完整帮助,请执行以下操作:
certutil -v -?
神秘地,该-encodehex
动词未使用certutil -?
或列出certutil -v -?
。但是使用来描述certutil -encodehex -?
。这是另一个方便的功能:-)
关于David Morales的评论,该动词有一个文献记载很少的类型选项,该选项-encodehex
允许创建没有标题行或页脚行的base64字符串。
certutil [Options] -encodehex inFile outFile [type]
类型1将产生没有页眉或页脚行的base64。
有关可用类型格式的简短列表,请参见https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p56536。有关可用格式的更多信息,请参见https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p57918。
未经调查,但-decodehex
动词还具有可选的尾随类型参数。
certutil -encode inputFileName encodedOutputFileName
生成一个用“ ----- BEGIN CERTIFICATE -----”和“ ----- END CERTIFICATE -----”括起来的base64字符串,因此您无法在生成文件后直接对其进行解码。
这是一个名为base64encode.bat的批处理文件,它对base64进行编码。
@echo off
if not "%1" == "" goto :arg1exists
echo usage: base64encode input-file [output-file]
goto :eof
:arg1exists
set base64out=%2
if "%base64out%" == "" set base64out=con
(
set base64tmp=base64.tmp
certutil -encode "%1" %base64tmp% > nul
findstr /v /c:- %base64tmp%
erase %base64tmp%
) > %base64out%
setlocal enabledelayedexpansion
和使用!base64tmp!
里面的(...)
。否则,该值是在(...)
读入序列时确定的,而不是在执行序列时确定的。