Windows 批处理解码base64
我正在尝试使用批处理创建安装程序。当然,安装程序需要由将要安装的文件组成,因此我考虑用base64编码这些文件,然后简单地对它们进行解码并将它们写入目标 当然,如果Windows有像Linux框中包含的Windows 批处理解码base64,windows,batch-file,base64,Windows,Batch File,Base64,我正在尝试使用批处理创建安装程序。当然,安装程序需要由将要安装的文件组成,因此我考虑用base64编码这些文件,然后简单地对它们进行解码并将它们写入目标 当然,如果Windows有像Linux框中包含的base64工具这样的工具,我的工作将非常简单。然而,由于它根本不存在,有没有办法完全使用批处理文件解码base64内容?我将如何做到这一点 感谢您的帮助 (这只是一个实验,所以我不担心效率低下之类的问题。)事实上Windows确实有一个对base64-CERTUTIL进行编码和解码的实用程序 我
base64
工具这样的工具,我的工作将非常简单。然而,由于它根本不存在,有没有办法完全使用批处理文件解码base64内容?我将如何做到这一点
感谢您的帮助
(这只是一个实验,所以我不担心效率低下之类的问题。)事实上Windows确实有一个对base64-CERTUTIL进行编码和解码的实用程序 我不确定Windows的哪个版本引入了此命令 要对文件进行编码,请执行以下操作:
certutil -encode inputFileName encodedOutputFileName
certutil -decode encodedInputFileName decodedOutputFileName
要解码文件,请执行以下操作:
certutil -encode inputFileName encodedOutputFileName
certutil -decode encodedInputFileName decodedOutputFileName
CERTUTIL有许多可用的动词和选项
要获取几乎所有可用动词的列表,请执行以下操作:
certutil -?
要获取有关特定动词的帮助(例如(-encode)):
要获得几乎所有动词的完整帮助,请执行以下操作:
certutil -v -?
奇怪的是,-encodehex
动词没有与certutil-?
或certutil-v-?
一起列出。但是它是使用certutil-encodehex-?
描述的。这是另一个方便的功能:-)
更新
关于David Morales的评论,在-encodehex
动词中有一个新的选项,它允许创建base64字符串,而不需要页眉或页脚行
certutil [Options] -encodehex inFile outFile [type]
类型为1将生成不带页眉或页脚行的base64
certutil [Options] -encodehex inFile outFile [type]
有关可用类型格式的简要列表,请参见。要更深入地了解可用的格式,请参阅
未进行调查,但
-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%
至少从那时起就已经存在了。我很可能会认为“base64在批处理中”是我在搜索引擎中输入的最绝望的东西运行
certutil-encode inputFileName encodedoutpFileName
生成一个base64字符串,该字符串由“----开始证书------”和“----结束证书------”括起来所以你不能在文件生成后直接解码。@DavidMorales-不是真的!你试过了吗?-DECODE命令在页眉和页脚就位的情况下运行良好。我不确定确切的规则,但CERTUTIL-DECODE对编码源的格式非常宽容。@AndrzejMartyna-这并不是因为它被破坏了,而是输入文件的最大大小为74472684字节。另外,请查看:这条评论是我最喜欢的答案,该程序更像是一个Linux体验。如果您添加setlocal enabledelayedexpansion
并使用,该脚本将工作得更好!base64tmp代码>在(…)
内。否则,值是在读入(…)
序列时确定的,而不是在执行序列时确定的。一个更简单的解决方案,不必处理头: