批量解码base64


83

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

当然,如果Windows拥有base64Linux盒子中包含的工具,我的工作将非常容易。但是,由于根本不存在,有没有办法使用批处理文件完全解码base64内容?我将如何做到这一点?

任何帮助表示赞赏。

(这只是一个实验,因此我不必担心效率低下之类的问题。)


1
也请查看以下内容:f2ko.de/en/b64.php
David Refoua,2016年

这个评论是我最喜欢的答案,该程序更像是Linux体验。
neokyle

Answers:


165

实际上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允许创建没有标题行或页脚行的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动词还具有可选的尾随类型参数。


8
至少从Windows Server 2003开始,Certutil就已经存在了。
David Ruhmann 2013年

37
我本来可以说“ base64成批”是我在搜索引擎中输入的最绝望的东西
nik.shornikov

4
运行会certutil -encode inputFileName encodedOutputFileName生成一个用“ ----- BEGIN CERTIFICATE -----”和“ ----- END CERTIFICATE -----”括起来的base64字符串,因此您无法在生成文件后直接对其进行解码。
大卫·莫拉莱斯

2
@DavidMorales-不正确!你试过了吗?使用适当的页眉和页脚,-DECODE命令可以正常工作。我不确定确切的规则,但是CERTUTIL -DECODE对编码源的格式非常宽容。
dbenham '16

4
@AndrzejMartyna-不是它坏了,但是最大输入文件大小为74472684字节。
SomethingDark

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%

2
如果添加这个脚本会更好的工作setlocal enabledelayedexpansion和使用!base64tmp!里面的(...)。否则,该值是在(...)读入序列时确定的,而不是在执行序列时确定的。
杰西·奇斯霍尔姆

1
一个更简单的解决方案,而不必处理标题:stackoverflow.com/a/60404255/12861751
HackingAddict1337
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.