Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理解码base64_Windows_Batch File_Base64 - Fatal编程技术网

Windows 批处理解码base64

Windows 批处理解码base64,windows,batch-file,base64,Windows,Batch File,Base64,我正在尝试使用批处理创建安装程序。当然,安装程序需要由将要安装的文件组成,因此我考虑用base64编码这些文件,然后简单地对它们进行解码并将它们写入目标 当然,如果Windows有像Linux框中包含的base64工具这样的工具,我的工作将非常简单。然而,由于它根本不存在,有没有办法完全使用批处理文件解码base64内容?我将如何做到这一点 感谢您的帮助 (这只是一个实验,所以我不担心效率低下之类的问题。)事实上Windows确实有一个对base64-CERTUTIL进行编码和解码的实用程序 我

我正在尝试使用批处理创建安装程序。当然,安装程序需要由将要安装的文件组成,因此我考虑用base64编码这些文件,然后简单地对它们进行解码并将它们写入目标

当然,如果Windows有像Linux框中包含的
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
(…)
内。否则,值是在读入
(…)
序列时确定的,而不是在执行序列时确定的。一个更简单的解决方案,不必处理头: