Декодирование base64 в пакетном режиме

Я пытаюсь сделать установщик с помощью пакета. Конечно, инсталлятор должен состоять из файлов, которые будут установлены, поэтому я думаю о кодировании файлов в base64 и просто их декодировать и записывать в пункт назначения.

Конечно, моя работа будет очень простой, если в Windows есть что-то вроде инструмента base64, который содержит ящики Linux. Однако, поскольку он просто не существует, есть ли способ полностью декодировать содержимое base64 с использованием пакетных файлов? И как бы я это сделал?

Любая помощь приветствуется.

(Это просто эксперимент, поэтому я не беспокоюсь о неэффективности и т.п.)

Ответ 1

На самом деле Windows имеет утилиту, которая кодирует и декодирует base64 - CERTUTIL

Я не уверен, какая версия Windows представила эту команду.

Чтобы закодировать файл:

certutil -encode inputFileName encodedOutputFileName

Чтобы декодировать файл:

certutil -decode encodedInputFileName decodedOutputFileName

Существует ряд доступных глаголов и вариантов, доступных для CERTUTIL.

Чтобы получить список почти всех доступных глаголов:

certutil -?

Чтобы получить помощь по определенному глаголу (например, -encode):

certutil -encode -?

Чтобы получить полную помощь почти для всех глаголов:

certutil -v -?

Загадочно, -encodehex глагол -encodehex не указан в certutil -? или certutil -v -? , Но это описано с помощью certutil -encodehex -? , Это еще одна удобная функция :-)

Обновить

Что касается комментария Дэвида Моралеса, в -encodehex глаголе -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 также есть необязательный аргумент -decodehex типа.

Ответ 2

Вот командный файл, называемый 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%