Extraction de données binaires

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Bucko
Batcheur occasionnel
Messages : 6
Enregistré le : 07 juin 2018 17:09

Extraction de données binaires

Message par Bucko » 07 juin 2018 18:02

Eh ... hm ... je ne parle pas francais, mais ...

Un fichier Delimiter.txt contient seulement une ligne commençant par la chaîne (par example) "de-li-mi-ter".

Un fichier FichierComposite.bin est créé de cette manière:

Code : Tout sélectionner

Copy /a Delimiter.txt + b/ FichierBinaire.exe /b FichierComposite1.bin
Il est possible de "decomposer" la FichierComposite1.bin, plutôt de extracte la partie binaire, FichierBinaire.exe, par:

Code : Tout sélectionner

findstr /v "^de-li-mi-ter" FichierComposite1.bin > FichieExtracte.exe
Le commande findstr "ignore" la ligne commençant par "de-li-mi-ter", et FichierExtracte.exe est identique au FichierBinaire.exe.

Tout est clair jusqu'à présent, n'est-ce pas?

Un fichier FichierComposite2.bin est créé de cette manière:

Code : Tout sélectionner

Copy /b UnFichier.exe + /a Delimiter.txt + b/ FichierBinaire.exe /b FichierComposite2.bin
Est-il possible d'adapter le usage de la commande findstr por qu'elle "ignore" pas seulement la ligne commençant par "de-li-mi-ter, mais aussis tous les lignes avant cette ligne?

Code : Tout sélectionner

............ FichierComposite2.bin > FichieExtracte.exe
FichierExtracte.bin devrait être identique au FichierBinaire.exe à nouveau.

Merci pour votre intérêt!

barnabe0057
King Of Batch
Messages : 68
Enregistré le : 24 janv. 2017 13:41

Re: Extraction de données binaires

Message par barnabe0057 » 07 juin 2018 21:27

Moi je ferais comme ça :
@echo off
setlocal enableextensions enabledelayedexpansion

Copy /a Delimiter.txt + /b FichierBinaire.exe /b FichierComposite1.bin

set position=0

for /f "tokens=1,*" %%A in (FichierComposite1.bin) do (
if !position! EQU 1 (echo %%A %%B >> FichierExtracte.bin)
if "%%~A"=="de-li-mi-teur" (set position=1)
)
pause

Bucko
Batcheur occasionnel
Messages : 6
Enregistré le : 07 juin 2018 17:09

Re: Extraction de données binaires

Message par Bucko » 07 juin 2018 22:25

Merci beaucoup, j'apprécie toi aide!

Mais cela fonctionne chez toi?
Chez moi, le FichierComposite1.bin est généré, mais le reste n'a aucun effet.

barnabe0057
King Of Batch
Messages : 68
Enregistré le : 24 janv. 2017 13:41

Re: Extraction de données binaires

Message par barnabe0057 » 07 juin 2018 22:52

J'ai juste un problème avec le fichier FichierComposite1.bin, il ne contient pas les lignes du fichier .exe

Le reste de mon code fonctionne parfaitement, il récupère toutes les lignes APRES le délimiteur.

Bucko
Batcheur occasionnel
Messages : 6
Enregistré le : 07 juin 2018 17:09

Re: Extraction de données binaires

Message par Bucko » 07 juin 2018 23:25

Chez moi, echo crée le FichierExtracte.bin seulement si FichierBinaire.exe est un fichier non-binaire.

Bucko
Batcheur occasionnel
Messages : 6
Enregistré le : 07 juin 2018 17:09

Re: Extraction de données binaires

Message par Bucko » 08 juin 2018 00:11

Je crois que seulement la commande findstr est capable d'écrire des données binaires.
Si c'est vrai, echo devra être remplacée par findstr, d'une manière ou d'une autre.

Bucko
Batcheur occasionnel
Messages : 6
Enregistré le : 07 juin 2018 17:09

Re: Extraction de données binaires

Message par Bucko » 08 juin 2018 10:24

J'ai maintenant trouvé une méthode et je ferai rapport bientôt.

barnabe0057
King Of Batch
Messages : 68
Enregistré le : 24 janv. 2017 13:41

Re: Extraction de données binaires

Message par barnabe0057 » 08 juin 2018 21:15

Alors ? Tu as trouvé quelque chose ?

Bucko
Batcheur occasionnel
Messages : 6
Enregistré le : 07 juin 2018 17:09

Re: Extraction de données binaires

Message par Bucko » 09 juin 2018 00:45

J'ai trouvé une solution après une longue recherche, mais il y a toujours un "petit" problème. Tout est décrit dans le script suivant. (Désolé, maintenant tout est en anglais.)

Code : Tout sélectionner

@echo off
setlocal enableextensions enabledelayedexpansion

REM === JOINING FILES ===

REM Divider.txt must consist of a line starting with "di-vi-der"
REM preceeded by at least one line and followed by a blank line.
echo This is a necessary preceeding line. > Divider.txt
echo di-vi-der This line must be followed by a blank line. >> Divider.txt

REM Join files to Joined.bin by one of these two methods:
REM copy /b FirstFile.exe + /a Divider.txt + /b File2BeExtracted.exe /b Joined.bin
type FirstFile.exe Divider.txt File2BeExtracted.exe > Joined.bin

REM === UNJOINING FILES ===

REM Get the line number of the dividing line in Joined.bin:
for /F "delims=:" %%a in ('findstr /N "^di-vi-der" "Joined.bin"') do set "lines=%%a"

REM Extract the part of the Joined.bin following the divider line:
< "Joined.bin" (

   REM Pass thru the first lines:
   for /L %%i in (1,1,%lines%) do set /P "="

   REM Copy the rest to Output.bin:
   findstr "^"

) > Output.bin
Le problème est le suivant: findstr ajoute 0D 0A (CR LF) à la fin du fichier. As-tu une idée de comment cela pourrait être corrigé?

Répondre