95 votes

Décodage de base64 en batch

J'essaie de créer un programme d'installation en utilisant le traitement par lots. Bien sûr, un installateur doit être composé de fichiers qui seront installés, donc je pense encoder les fichiers en base64, et simplement les décoder et les écrire vers leur destination.

Bien sûr, mon travail serait très facile si Windows avait quelque chose comme la base64 outil que les boîtes Linux contiennent. Cependant, puisqu'il n'existe pas, y a-t-il un moyen de décoder le contenu en base64 ? complètement en utilisant des fichiers batch ? Et comment pourrais-je y parvenir ?

Toute aide est appréciée.

(C'est juste une expérience, donc je ne m'inquiète pas de l'inefficacité et autres).

183voto

dbenham Points 46458

En fait, Windows dispose d'un utilitaire qui encode et décode la base64 - CERTUTIL.

Je ne suis pas sûr de la version de Windows qui a introduit cette commande.

Pour encoder un fichier :

certutil -encode inputFileName encodedOutputFileName

Pour décoder un fichier :

certutil -decode encodedInputFileName decodedOutputFileName

Il existe un certain nombre de verbes et d'options disponibles pour CERTUTIL.

Pour obtenir une liste de presque tous les verbes disponibles :

certutil -?

Pour obtenir de l'aide sur un verbe particulier (-encode par exemple) :

certutil -encode -?

Pour obtenir une aide complète pour presque tous les verbes :

certutil -v -?

Mystérieusement, le -encodehex Le verbe n'est pas répertorié avec certutil -? o certutil -v -? . Mais il est décrit en utilisant certutil -encodehex -? . C'est une autre fonction pratique :-)

Mise à jour

En ce qui concerne le commentaire de David Morales, il existe une option de type mal documentée à la -encodehex verbe qui permet de créer des chaînes de caractères en base64 sans lignes d'en-tête ou de pied de page.

certutil [Options] -encodehex inFile outFile [type]

Un type de 1 donnera la base64 sans les lignes d'en-tête ou de pied de page.

Voir https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p56536 pour une brève liste des formats de type disponibles. Et pour un examen plus approfondi des formats disponibles, voir https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p57918 .

Non enquêté, mais le -decodehex Le verbe a également un argument de type optionnel.

5voto

BSalita Points 933

Voici un fichier batch, appelé base64encode.bat, qui encode la 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%

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X