我正在尝试使用批处理制作安装程序。当然,安装程序需要包含将要安装的文件,所以我正在考虑用 base64 对文件进行编码,然后简单地对它们进行解码并将它们写入目的地。
当然,如果 Windows 有类似base64
Linux 盒子包含的工具的话,我的工作会很轻松。但是,由于它根本不存在,有没有办法使用批处理文件完全解码 base64 内容?我将如何做到这一点?
任何帮助表示赞赏。
(这只是一个实验,所以我不担心效率低下之类的。)
我正在尝试使用批处理制作安装程序。当然,安装程序需要包含将要安装的文件,所以我正在考虑用 base64 对文件进行编码,然后简单地对它们进行解码并将它们写入目的地。
当然,如果 Windows 有类似base64
Linux 盒子包含的工具的话,我的工作会很轻松。但是,由于它根本不存在,有没有办法使用批处理文件完全解码 base64 内容?我将如何做到这一点?
任何帮助表示赞赏。
(这只是一个实验,所以我不担心效率低下之类的。)
实际上,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
动词也有一个可选的尾随类型参数。
这是一个名为 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%