Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 2 sur 2
Aller à la page: <  1, 2
Extraire de zip
Auteur Message
Répondre en citant
Message Extraire de zip 
Revue du message précédent :

RE

Et nouvelle question ......... oui, je sais Sad

set "source=E:\01" parce que 01 est tout simplement le mois de janvier.
Bien sur, il y a les dossiers 02, 03, 04 etc.

Alors comment faire pour que le choix du dossier se fasse sans modifier le .bat à chaque fois ?
Déjà je peux modifier les noms des 2 autres dossiers, mais pour le mois en cours ?

Peut-être :
Code:
set "unzip=C:\Program Files\WinRAR\WinRAR.exe"
    set "source=E:\01"
    set "source=E:\02"
    set "source=E:\03"
    ...........................
    set "destination=E:\zip"
    set "archive=*.zip"
 




Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Extraire de zip 
griggione a écrit:
RE

Je te remercie pour le lien.
Mais ce n'est pas tout à fait la même chose. Je vais approfondir de ce coté.


C'était une piste pas un code tout fait qui répond à 100% à ton besoin.
Sur la base du lien, voici un début de code sur lequel tu pourras travailler
si tu veux, et ajouter la prise en charge d'arguments, l'extraction, le
nettoyage des fichiers temporaires et surtout la gestion des erreurs, etc.

Pour le test, remplace "X:\chemin\fichier.zip" par une donnée valide

Code:
Set fso = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")
const system_temp_folder_id = 2
temp_folder = fso.getspecialfolder(system_temp_folder_id).SubFolders.add(fso.GetTempName)

set source = app.NameSpace("X:\chemin\fichier.zip")

Parse_and_print_info source

Sub Parse_and_print_info(directory)
For Each folderItem In directory.Items
    wscript.echo folderItem
   
    If folderItem.IsFolder = true Then
      wscript.echo "*** exploring Folder: "& folderItem.name
      Parse_and_print_info folderItem.getfolder
    End If
   
    If strcomp(fso.GetExtensionName(folderItem.Name), "zip", 1) = 0 then
      wscript.echo "*** unpacking Zip: "& folderItem.name
      app.NameSpace(temp_folder).CopyHere  folderItem, 12
      wscript.echo temp_folder& "\"& folderItem.path
      Parse_and_print_info app.NameSpace(temp_folder& "\"& folderItem.path)
      'fso.DeleteFile temp_folder& "\"& folderItem.path, true
    End If
   
    If strcomp(fso.GetExtensionName(folderItem.Name), "xml", 1) = 0 then
      wscript.echo "*** extracting XML: "& folderItem.name
    End If
     
Next 
End Sub



Winrar en ligne de commande, je trouve ça pas beau (si je me rappelle bien,
la fenêtre s'ouvre) et je ne sais plus si unrar.exe prend en charge zip. Par contre,
avec 7zip, ce genre d'exercice relève de la simple formalité.



Répondre en citant
Message Extraire de zip 
Bonjour jay,

Bon, j'ai du travail.
Je te remercie, je vais voir ce que cela donne.

jay a écrit:

Winrar en ligne de commande, je trouve ça pas beau (si je me rappelle bien,
la fenêtre s'ouvre)

Oui effectivement il y a une fenêtre, mais ce n'est pas trop dérangeant.

jay a écrit:

et je ne sais plus si unrar.exe prend en charge zip.

Oui, sans problème.




______________________________________________________
66 ans et bébé web
Répondre en citant
Message Extraire de zip 
Normalement ce code devrait fonctionner Okay

Code:
@echo off
 
call :getCurrentDate
echo;Day: %Day%, Month: %Month%, Year: %Year%
echo;
 
set WinRAR="%ProgramFiles%\WinRAR\WinRAR.exe"
set Source="E:\%Month%"
set Destination="E:\%Month%bis"
set Archive=zip
 
call :extractAllFiles %Source% %Destination% >nul 2>&1
 
pause>nul&exit
:extractAllFiles <SOURCE> <DESTINATION>
  set source=%~1
  set cd_=%CD%
  %source:~0,1%:
  if "%~3"=="" (
    echo;[%date%] - %time% : Extraction de "%~1" vers "%~2">CON
  )
  if exist %WinRAR% (
    call :WinRAR "%~1" "%~2" %~3
    if not %ERRORLEVEL%==0 (
      echo;Une erreur est survenue !>CON
    ) else if exist "%~2\*.%Archive%" (
      call :extractAllFiles "%~2" "%~2" -de
    ) else (
      echo;[%date%] - %time% : Extraction termin‚e !>CON
    )
  ) else (
    echo;%WinRAR% n'existe pas !>CON
  )
  %cd_:~0,1%:
  cd %cd_%
goto :eof
:WinRAR
  for /R "%~1\" %%f in ("*.%Archive%") do (
    echo;%%f
    %WinRAR% e "%%~f" -o "%~2" -y
    if not %ERRORLEVEL%==0 (
      echo;Error: "%%~f">CON
    )
    if not "%~3"=="" (
      del /q /s "%%~f"
    )
  )
goto :eof
:getCurrentDate <output>
  for /F "skip=1 delims=" %%F in ('wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE') do (
    for /F "tokens=1-3" %%L in ("%%F") do (
        set Day=0%%L
        set Month=0%%M
        set Year=%%N
    )
  )
  set Day=%Day:~-2%
  set Month=%Month:~-2%
goto :eof




Dernière édition par Flammrock le Mar 13 Fév 2018 - 17:10; édité 1 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Extraire de zip 
RE

Je m'occupe d'une association informatique et c'est l'heure des arrivées.
Tous ces scripts me vont bien et demain matin, au calme, je regarde tout ça et je reviens vers vous.

En tous cas, sympa pour le suivi Okay




______________________________________________________
66 ans et bébé web
Répondre en citant
Message Extraire de zip 
RE

jay a écrit:

C'était une piste pas un code tout fait qui répond à 100% à ton besoin.
Sur la base du lien, voici un début de code sur lequel tu pourras travailler ...

Je suis allé et j'ai testé ton code, mais je ne vois pas sous quelle extention il faut l'enregistrer ?

jay a écrit:

Pour le test, remplace "X:\chemin\fichier.zip" par une donnée valide

J'ai changé d'endroit et faut pas oublier qu'il y a plusieurs zip dans le dossier, j'ai mis :
Code:
set source = app.NameSpace("C:\decompresser\01\*.zip")


-----------------------------

Flammrock a écrit:
Normalement ce code devrait fonctionner Okay

Oui et non !

Non parce qu'une fois lancé, la fenêtre de wirRar vibre comme une folle et reste en me bloquant tout.
Plus rien à faire, même pas avec le Gestionnaire des tâches. Obligé de fermer la session.

Oui, ou presque, parce dans le dossier "bis", j'ai trouvé mes fichiers xml mais aussi les zip.
D'où dans mon code, extraction en deux temps, un dans un dossier "bis" pour les zip et ensuite dans le dossier "ter" pour les xml
A la limite, je peux garder qu'un dossier, mais faudrait virer les zip une fois extraits.

Code:
call :getCurrentDate
echo;Day: %Day%, Month: %Month%, Year: %Year%
echo;
set WinRAR="%ProgramFiles%\WinRAR\WinRAR.exe"
set Source="E:\%Month%"
set Destination="E:\%Month%bis"
set Archive=zip

De même, je n'ai pas besoin des dates, parce que si je veux extraire le mois de janvier alors que nous sommes en février .......
Par contre, il faudrait que cela extrait quel que soit le mois (01, 02, 03 ...) sans avoir besoin de modifer le .bat




______________________________________________________
66 ans et bébé web
Répondre en citant
Message Extraire de zip 
RE

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

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

Code:
@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. &pause


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



---------------------------------------------
De mon coté, toujours sous .bat, j'arrive à extraire tout avec ceci :

Code:
 @echo off

    set "unzip=C:\Program Files\WinRAR\WinRAR.exe"
    set "source=C:\decompresser\01"
    set "destination=C:\decompresser\zip"
    set "archive=*.zip"

    if not exist "%source%\%archive%" (echo L'archive "%archive%" n'existe pas !) ELSE ("%unzip%" e "%source%\%archive%" -o "%destination%" &echo Errorlevel : %errorlevel% Si errorlevel = 0 : Aucunes erreurs)

"C:\Program Files\WinRAR\WinRAR.exe" e "C:\decompresser\zip\*.zip" -o "C:\decompresser\xml" -r

msg %username% /w /v /time:60 "Le deplacement des fichier xml est maintenant termine !"
    echo. &pause


J'ai même fait un exécutable avec bat-to-exe-converter pour que monsieur tout le monde s'en serve.

Reste le problème IMPORTANT :
Comment faire pour que ce .bat ouvre aussi bien un dossier 01 que 04 ou 12, bref, qu'il y ai juste à mettre dans le dossier "decompresser", l'archive du mois que l'on veut extraire.




______________________________________________________
66 ans et bébé web
Répondre en citant
Message Extraire de zip 
griggione a écrit:
RE
Non parce qu'une fois lancé, la fenêtre de wirRar vibre comme une folle et reste en me bloquant tout.
Plus rien à faire, même pas avec le Gestionnaire des tâches. Obligé de fermer la session.


A un moment tu avais marquer :
griggione a écrit:
Oui effectivement il y a une fenêtre, mais ce n'est pas trop dérangeant.

Donc je me suis permis de laisser la fenêtre xDDD (sauf que moi il y a DES fenêtres (beaucoup))
Vraiment désolé


griggione a écrit:
Oui, ou presque, parce dans le dossier "bis", j'ai trouvé mes fichiers xml mais aussi les zip.
D'où dans mon code, extraction en deux temps, un dans un dossier "bis" pour les zip et ensuite dans le dossier "ter" pour les xml
A la limite, je peux garder qu'un dossier, mais faudrait virer les zip une fois extraits.

Normal qu'il y est encore des zip dedans, tu as fermer le batch en pleine exécution..
En fait j'ai créé une fonction récursive pour extraire tous les zip sans exception. (et qui les supprime au passage pour ne garder vraiment que les xml)




griggione a écrit:
De même, je n'ai pas besoin des dates, parce que si je veux extraire le mois de janvier alors que nous sommes en février .......
Par contre, il faudrait que cela extrait quel que soit le mois (01, 02, 03 ...) sans avoir besoin de modifer le .bat

Ah ok !
Donc tu veux "sélectionner le mois voulu", c'est ça ?
Un simple set /p fait l'affaire Mr. Green
Code:
@echo off
set /p "mois=Mois (ex: 01, 05, 11..): "
echo;%mois%
pause>nul




Donc du coup j'ai un peu arrangé mon code (en espérant que cette fois ci il fonctionne comme convenu Okay ) :
Code:
@echo off
 
set /p "Month=Mois (ex: 01, 05, 11..): "
echo;Mois s‚lectionn‚ : %Month%
pause
echo;

set WinRAR="%ProgramFiles%\WinRAR\WinRAR.exe"
set Source="E:\%Month%"
set Destination="E:\%Month%bis"
set Archive=zip
 
call :extractAllFiles %Source% %Destination% >nul 2>&1
 
pause>nul&exit
:extractAllFiles <SOURCE> <DESTINATION>
  set source=%~1
  set cd_=%CD%
  %source:~0,1%:
  if "%~3"=="" (
    echo;[%date%] - %time% : Extraction de "%~1" vers "%~2">CON
  )
  if exist %WinRAR% (
    call :WinRAR "%~1" "%~2" %~3
    if not %ERRORLEVEL%==0 (
      echo;Une erreur est survenue !>CON
    ) else if exist "%~2\*.%Archive%" (
      call :extractAllFiles "%~2" "%~2" -de
    ) else (
      echo;[%date%] - %time% : Extraction termin‚e !>CON
    )
  ) else (
    echo;%WinRAR% n'existe pas !>CON
  )
  %cd_:~0,1%:
  cd %cd_%
goto :eof
:WinRAR
  for /R "%~1\" %%f in ("*.%Archive%") do (
    echo;%%f
    %WinRAR% e "%%~f" -o "%~2" -y -ibck
    if not %ERRORLEVEL%==0 (
      echo;Error: "%%~f">CON
    )
    if not "%~3"=="" (
      del /q "%%~f"
    )
  )
goto :eof





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Extraire de zip 
Bonjour tous,

Flammrock a écrit:

Donc du coup j'ai un peu arrangé mon code (en espérant que cette fois ci il fonctionne comme convenu Okay ) :


Je vois ça. Et maintenant plus de beug, bien joué ! Okay
Le tout se fait en 1mn50s pour extraire 1700 fichiers.
Avec le bout de code que j'ai bricolé, je met 15s, mais c'est pas propre comme ton code.

Flammrock a écrit:

Un simple set /p fait l'affaire Mr. Green
Code:
@echo off
set /p "mois=Mois (ex: 01, 05, 11..): "
echo;%mois%
pause>nul


OK mais ça ne m'arrange pas vraiment, parce qu'il faut intervenir dans la fenêtre cmd pour mettre le mois et je préfère éviter vu ceux qui vont le faire.
D'où ma demande, comment faire pour que l'archive déposée, donc de 01 à 12, pas en même temps, soit extraite ?

C'est pour ça aussi que je fait un exécutable. que je cache la fenêtre cmd et affiche un msgbox.
J'ai donc modifié, mais cela m'ouvre 2 msgbox :

Code:
          call :extractAllFiles "%~2" "%~2" -de
        ) else (
          echo;[%date%] - %time% : Extraction termin‚e !>CON
        )
        msg %username% /w /v /time:60 "Le deplacement des fichier xml est maintenant termine !"
      ) else (
        echo;%WinRAR% n'existe pas !>CON
      )





______________________________________________________
66 ans et bébé web
Message Extraire de zip 


Montrer les messages depuis:
Répondre au sujet Page 2 sur 2
Aller à la page: <  1, 2
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch