× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 Quel langage pour extraire un fichier de zip 3e niveau
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
griggione
  Posté le 10/02/2018 @ 12:05 
Aller en bas de la page 
Grand Maître astucien

Bonjour tous,

Enfin un peu de travail sérieux.

Mon arborescence :
[code]
01
...bilans_saisis_20180105.zip
...bilans_saisis_20180107.zip
...bilans_saisis_20180108.zip
......PUB_CA_972501571_6901_1972B00157_2017_B2017047456.zip
......PUB_CA_972505804_6901_1972B00580_2017_B2017047808.zip
......PUB_CA_997625801_6901_1976B00323_2016_B2017047308.zip
.........PUB_CA_972501571_6901_1972B00157_2017_B2017047456.donnees.xml
[/code]

Les zip bilans_saisis sont environ 50, les premiers zip PUB_CA sont environ 5000 et dans chaque un .xml.
Ceux sont ces .xml que j'aimerais récupérer.

Pour l'instant, avec Batch, je me sers de winRar pour les zip et le .bat fini l'extraction.
Mais ça m'oblige à avoir trois dossiers, 1 pour le dossier, 2 pour récupérer les zip, 3 pour les xml.

QUESTION :
Quel langage pour faire tout ça sans winRar. Direct et si possible que 2 dossiers, un celui des archives et 2 celui des xml.



Modifié par griggione le 10/02/2018 12:07
Publicité
Titus68
 Posté le 10/02/2018 à 17:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pour l'extraction en batch avec 7zip çà marche bien :

Exemple de commande :

"C:\Program Files\7-Zip\7z.exe" e t.zip -ote *.xml -r

e : extraire

t.zip fichier à extraire

-ote : écrire en sortie (-o) dans le dossier par exemple te

*.xml pour n'extraire que les xml

-r : récursif (explore les sous-dossiers)



Modifié par Titus68 le 10/02/2018 17:15
griggione
 Posté le 10/02/2018 à 18:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Bonsoir Titus68

Titus68 a écrit :

Pour l'extraction en batch avec 7zip çà marche bien :

OK mais ça marche trés bien aussi avec winRar comme dit au-dessus.

Ma recherche est :

Message original par griggione

QUESTION :
Quel langage pour faire tout ça sans winRar. Direct et si possible que 2 dossiers, un celui des archives et 2 celui des xml.

Comment faire un script, du moins quel langage pour faire tout ça direct.

Donc sans log externe.

Titus68
 Posté le 11/02/2018 à 02:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Sans passer par un logiciel externe :

faire une recherche google avec "vbs extract files" : il y a plein d'exemples.

Sinon la plupart des logiciels fournissant des api (interface de communication), il est souvent possible à partir de PowerShell, vbscript ou vba d'appeler des fonctions d'un autre logiciel tel que 7zip (par exemple pour 7zip il existe des sdk sur :

http://7-zip.org/sdk.html)

Disons que je ne comprends pas trop pourquoi tu souhaites faire des scripts alors qu'en ligne de commande (même dos) avec winrar ou 7zip tu peux déjà faire pas mal de choses ?

Selon moi, la plupart des logiciels comme winzip, winrar ou 7zip étant vraiment spécialisés il y a plus de chances qu'ils prennent plus de format en compte et gèrent mieux les fichiers compressés qu'un simple script.

griggione
 Posté le 13/02/2018 à 11:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien
Titus68 a écrit :

faire une recherche google avec "vbs extract files" : il y a plein d'exemples.

RE

Ben justement, j'ai déjà regardé et pas trouvé grand chose, je vais y retourner.

Il doit bien y avoir un langage qui fasse l'extraction des .xml sans passer par rar ou autre.

Constance
 Posté le 13/02/2018 à 13:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut .o/

Est-ce que ça : https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx te donne une piste ?

griggione
 Posté le 13/02/2018 à 17:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Bonjour Constance

Merci pour le lien.

Ok, il y a les scripts en C# ou VB, mais enregistrer sous ....... quoi pour lancer la procédure ?

En tout cas on est dans la bonne voie

Titus68
 Posté le 13/02/2018 à 22:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pour l'exemple de Constance, je pense qu'il faut le logiciel de développement Visual Studio, avant il existait des versions "Express" gratuites maintenant il me semble que c'est la version "community" pour créer des programmes style .exe :

https://www.visualstudio.com/fr/downloads/

Sinon en utilisant vbscript déjà présent sous windows :

http://www.codeexperts.com/showthread.php?221-zip-and-unzip-files-with-vbs

Il faut copier, adapter et enregistrer le code dans un fichier .txt (avec le bloc-notes par exemple) puis renommer le fichier .txt par .vbs (remplacer l'extension .txt par .vbs) pour obtenir un script vbscript qu'on peut exécuter.

Existe aussi en PowerShell :

https://www.howtogeek.com/tips/how-to-extract-zip-files-using-powershell/

A mon avis le vbscript est le plus simple, après je ne sais pas si on peut paramétrer plus la fonction de décompression.



Modifié par Titus68 le 13/02/2018 22:52
griggione
 Posté le 14/02/2018 à 07:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

RE

Bon ben avec tout ça, j'ai de quoi m'occuper pour un moment.

Je teste et je reviens vers vous.

Publicité
griggione
 Posté le 17/02/2018 à 11:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

RE

Constance a écrit :

Est-ce que ça : https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx te donne une piste ?

Je suis allé voir et ma foi j'ai essayé ceci, mais rien ne bouge :

Imports System.IO
Imports System.IO.Compression

Module Module1

Sub Main()
Dim startPath As String = "C:\decompresser\01\*.zip\start"
Dim zipPath As String = "c:\decompresser\zip\result.zip"
Dim extractPath As String = "c:\decompresser\xml\extract"

ZipFile.CreateFromDirectory(startPath, zipPath)

ZipFile.ExtractToDirectory(zipPath, extractPath)
End Sub

End Module

Ensuite ...

Titus68 a écrit :

Sinon en utilisant vbscript déjà présent sous windows :

http://www.codeexperts.com/showthread.php?221-zip-and-unzip-files-with-vbs

Là non plus, ça ne donne rien :

pathToZipFile = "C:\decompresser\01\*.zip"
extractTo = "C:\decompresser\xml"

set sa = CreateObject ("Shell.Application")
set filesInzip = sa.NameSpace (pathToZipFile) .items
sa.NameSpace (extractTo) .CopyHere (fichiersInzip)

Aprés, PowerShell, connais pas, je ne sais même pas quelle extension utiliser , ni comment exécuter.



Modifié par griggione le 17/02/2018 11:47
griggione
 Posté le 17/02/2018 à 16:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

RE

J'ai modifié l'emplacement des dossiers et .bat

Dans mes recherches, en powershell, j'ai trouvé ceci :

@echo off
powershell.exe -nologo -noprofile -command & { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('C:\decompresser\01\*.zip', 'C:\decompresser\xml'); }
echo. &pauseJ'ai modifié l'emplacement des dossiers et .bat

Une fois exécuté, j'ai ce message :

Titus68
 Posté le 17/02/2018 à 18:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pour le fichier .vbs

DirZip="c:\MonCheminDuFicherZip"

FicZip="MonFichier.zip"

DirUnzip="c:\MonDossierDecompression"

pathToZipFile = DirZip & "\" & Ficzip

extractTo = DirUnzip

set sa = CreateObject("Shell.Application")

set filesInzip = sa.NameSpace(pathToZipFile).items

sa.NameSpace (extractTo).CopyHere(fichiersInzip)

Remplacer :

c:\MonCheminDuFicherZip par le path de ton fichier zip

MonFichier.zip par le nom de ton fichier zip

c:\MonDossierDecompression par le nom d'un dossier d'extraction

Attention : pathToZipFile) .items : pas d'espace entre ) et .items

(extractTo) .CopyHere (fichiersInzip) idem : (extractTo).CopyHere(fichiersInzip)

J'ai testé çà fonctionne bien et c'est même récursif.

Pour le PowerShell en otant & entre -command & { çà se lance mais il ne cherche pas récursivement dans l'archive il me semble.

Avec W10 il y a même une fonction encore plus simple mais non récursive non plus (pas besoin de system.IO ... :

Expand-archive

Voir https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/expand-archive?view=powershell-5.1



Modifié par Titus68 le 17/02/2018 18:31
griggione
 Posté le 20/02/2018 à 11:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Bonjour Titus68

DirZip="C:\decompresser\01"
FicZip="*.zip"
DirUnzip="C:\decompresser\xml"

pathToZipFile = DirZip & "\" & Ficzip
extractTo = DirUnzip

set sa = CreateObject ("Shell.Application")
set filesInzip = sa.NameSpace (pathToZipFile).items
sa.NameSpace (extractTo) .CopyHere (fichiersInzip)

Je le lance grâce à un .bat mais ça ne donne rien.

La fenêtre se lance un 10eme de seconde.

Titus68 a écrit :

Pour le PowerShell en otant & entre -command & { çà se lance mais il ne cherche pas récursivement dans l'archive il me semble.

+1

Titus68
 Posté le 22/02/2018 à 17:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Griggione,

Ce script je pense qu'il ne fonctionne que pour un fichier zip (tu as mentionné *.zip).

Indique un nom de fichier zip et essaye déjà avec un seul fichier. Pour ce qui de traiter plusieurs fichiers on peut voir après.

(extractTo) .CopyHere(fichiersInzip) : supprime les espaces => (extractTo).copyHere(fichiersInzip)

A la fin de ton batch, rajouter la ligne :

pause

Comme çà si dans ton vbs une erreur est détectée la fenêtre de commande restera ouverte et tu devrais avoir un message d'erreur qu'il faudrait nous indiquer.

griggione
 Posté le 23/02/2018 à 07:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

RE

D'abord mon .bat :

c:\windows\system32\cscript.exe c:\decompresser\decompresser_xml_2.0.5.vbs
pause

OK je modifie mon vbs, FicZip="bilans_saisis_20180105.zip" et l'espace:

DirZip="C:\decompresser\01"
FicZip="bilans_saisis_20180105.zip"
DirUnzip="C:\decompresser\xml"

pathToZipFile = DirZip & "\" & Ficzip
extractTo = DirUnzip

set sa = CreateObject ("Shell.Application")
set filesInzip = sa.NameSpace (pathToZipFile).items
sa.NameSpace (extractTo).CopyHere (fichiersInzip)

ce qui donne :

je re-modifie mon .vbs, FicZip="C:\decompresser\bilans_saisis_20180105.zip" :

DirZip="C:\decompresser\01"
FicZip="C:\decompresser\bilans_saisis_20180105.zip"
DirUnzip="C:\decompresser\xml"

pathToZipFile = DirZip & "\" & Ficzip
extractTo = DirUnzip

set sa = CreateObject ("Shell.Application")
set filesInzip = sa.NameSpace (pathToZipFile).items
sa.NameSpace (extractTo).CopyHere (fichiersInzip)

ce qui donne :

Donc pas d'extraction les deux fois.
Peut-être parce que c'est en double rideaux, je remet l'arborescence :

01
...bilans_saisis_20180105.zip
......PUB_CA_B2017047456.zip
.........PUB_CA_B2017047456.donnees.xml

dossier > zip > zip > fichier à extraire



Modifié par griggione le 23/02/2018 07:38
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
8,99 €Jeu PC Star Wars: Battlefront 2 à 8,99 €
Valable jusqu'au 27 Novembre

Amazon propose actuellement le jeu PC Star Wars: Battlefront 2 à 8,99 €. Le code du jeu vous serra envoyé par email et vous pourrez le télécharger sur Origin.


> Voir l'offre
-30%-30% sur une sélection d'articles reconditionnés Amazon
Valable jusqu'au 02 Décembre

Amazon offre actuellement 30% de remise immédiate sur une large sélection (+10 000 produits) d'articles reconditionnés par ses soins. Tous les articles recondionnés par Amazon bénéficie des mêmes garanties et services que les produits neufs : livraison gratuite dès 25 €, retours possibles dans les 30 jours. Cette remise sera automatiquement déduite lors de l’étape de finalisation de votre commande.


> Voir l'offre
279,20 €Mini PC MINISFORUM UM300 (Ryzen 3 3300U, 8Go RAM, 256 Go SSD) à 279,20 € avec le code BGUN30
Valable jusqu'au 28 Novembre

Banggood propose actuellement le mini PC MINISFORUM UM300 à 272,40 € avec le code promo BGUN30. Ce mini PC au format NUC d'Intel possède un processeur Ryzen 3 3300U avec chip graphique Vega 6, 8 Go de RAM DDR4 et un SSD de 256 Go. Il dispose d'une connectique complète : un emplacement 2,5 pouces libre (pour ajouter un disque dur ou un SSD supplémentaire, le WiFi6, le bluetooth 5.1, 3 ports USB 3.1, un port HDMI 2.0, un DisplayPort, deux ports Ethernet Gigabit et tourne sous Windows 10 que vous pourrez mettre en français. Il est livré avec une alimentation européenne. Branchez ce mini PC sur une TV ou un écran et vous avez un ordinateur discret et performant. Comptez 6,80 € pour l'assurance et la livraison soit un total de 279,20 € livré.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une vingtaine de jours. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre

Sujets relatifs
Extraire une image d'un fichier SWF
macro excell pour ouverture fichier avec password
quel SGBD apprendre pour debutant ?
fichier entête langage C
recherche un logiciel pour ouvrir un fichier
aide pour fichier .bat
quel langage ?
Petit coup de main pour un fichier "batch" svp
dll pour le langage C
Parsing d'un fichier[Langage C]
Plus de sujets relatifs à Quel langage pour extraire un fichier de zip 3e niveau
 > Tous les forums > Forum Autres langages