92

我正在尝试使用批处理制作安装程序。当然,安装程序需要包含将要安装的文件,所以我正在考虑用 base64 对文件进行编码,然后简单地对它们进行解码并将它们写入目的地。

当然,如果 Windows 有类似base64Linux 盒子包含的工具的话,我的工作会很轻松。但是,由于它根本不存在,有没有办法使用批处理文件完全解码 base64 内容?我将如何做到这一点?

任何帮助表示赞赏。

(这只是一个实验,所以我不担心效率低下之类的。)

4

2 回答 2

178

实际上,Windows 确实有一个对 base64 进行编码和解码的实用程序 - CERTUTIL

我不确定哪个版本的 Windows 引入了这个命令。

对文件进行编码:

certutil -encode inputFileName encodedOutputFileName

要解码文件:

certutil -decode encodedInputFileName decodedOutputFileName

CERTUTIL 有许多可用的动词和选项。

要获取几乎所有可用动词的列表:

certutil -?

要获得特定动词的帮助(例如 -encode):

certutil -encode -?

要获得几乎所有动词的完整帮助:

certutil -v -?

奇怪的是,-encodehex动词没有用certutil -?or列出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动词也有一个可选的尾随类型参数。

于 2013-06-05T17:55:02.130 回答
5

这是一个名为 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%
于 2017-01-30T19:55:48.140 回答