批量解码base64

时间:2013-06-05 17:02:18

标签: windows batch-file base64

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

当然,如果Windows有类似Linux框所包含的base64工具,我的工作将非常简单。但是,由于它根本就不存在,有没有办法使用批处理文件解码base64内容完全?我将如何实现这一目标?

感谢任何帮助。

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

2 个答案:

答案 0 :(得分:148)

实际上,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动词有一个poorly documented type option,允许创建没有页眉或页脚行的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动词也有可选的尾随类型参数。

答案 1 :(得分: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%