我正在尝试使用批处理创建安装程序。当然,安装程序需要由将要安装的文件组成,所以我考虑使用base64对这些文件进行编码,然后简单地解码并将它们写入其目标位置。
如果Windows也像Linux系统一样包含 base64
工具,我的工作肯定很容易。然而,由于Windows中没有此工具,是否有任何方法可以完全使用批处理文件解码base64内容?我该如何实现呢?
任何帮助将不胜感激。
(这只是一个实验,所以我不用担心效率等问题。)
我正在尝试使用批处理创建安装程序。当然,安装程序需要由将要安装的文件组成,所以我考虑使用base64对这些文件进行编码,然后简单地解码并将它们写入其目标位置。
如果Windows也像Linux系统一样包含 base64
工具,我的工作肯定很容易。然而,由于Windows中没有此工具,是否有任何方法可以完全使用批处理文件解码base64内容?我该如何实现呢?
任何帮助将不胜感激。
(这只是一个实验,所以我不用担心效率等问题。)
实际上,Windows确实有一个编码和解码base64的实用程序 - CERTUTIL。
我不确定是哪个版本的Windows引入了这个命令。
要对文件进行编码:
certutil -encode inputFileName encodedOutputFileName
解码文件:
certutil -decode encodedInputFileName decodedOutputFileName
certutil -?
如果需要针对特定的动词(例如-encode)获取帮助:
certutil -encode -?
获取几乎所有动词的完整帮助:
certutil -v -?
-encodehex
命令在 certutil -?
或者 certutil -v -?
中没有列出。但可以使用 certutil -encodehex -?
命令来查看其描述。这是另一个方便的功能 :-)
-encodehex
命令有一个文档不全的类型选项,可以创建没有头部或尾部行的 base64 字符串。 了解更多
certutil [Options] -encodehex inFile outFile [type]
当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%
(...)
内添加setlocal enabledelayedexpansion
并使用!base64tmp!
,那么此脚本将更有效。否则,当读取(...)
序列时确定其值,而不是在执行时确定其值。 - Jesse Chisholm