我正在尝试使用批处理来制作安装程序。当然,安装程序需要包含将要安装的文件,因此我正在考虑在base64中对文件进行编码,并简单地对它们进行解码并将它们写入目标。
当然,如果Windows有类似Linux框所包含的base64
工具,我的工作将非常简单。但是,由于它根本就不存在,有没有办法使用批处理文件解码base64内容完全?我将如何实现这一目标?
感谢任何帮助。
(这只是一个实验,所以我并不担心效率低下等。)
答案 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%