Page 1 sur 1

Fonction permétant de compresser element un a un

Posté : 23 mars 2010 16:07
par jah
Bonjour a tous,

Je suis nouveau sur le forum , je souhaiterais avoir des piste pour réaliser un batch pour la compression de dossier ( et ce qu'il inclue lol)un à un ou en masse qui genererer une liste au format txt a la fin du processus.

J'en profite pour demander comment faire pour placer un code à l'avant d'un ligne qaund celle ci son à la marge

ex: j'ai plusieurs cartes IGN Rando carto explorer que j'ai lister comme ci dessous et je dois placer en avant cette commende mais j'ai pas avant de le faire un à un (trop fénian ;) )

Code : Tout sélectionner

89_OUEST - Yonne
89_EST - Yonne
...
commande a mettre en avant

Code : Tout sélectionner

"C:\Program Files\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "
commande a mettre en arriere

Code : Tout sélectionner

.7z" "D:\MESDOC~1\MESMED~1\CARTEI~1\
Aidez moi SVP

Re: Fonction permétant de compresser element un a un

Posté : 23 mars 2010 19:55
par Laddy
Bonjour
j'ai rien compris

C'est quoi cette ligne ???

Code : Tout sélectionner

.7z" "D:\MESDOC~1\MESMED~1\CARTEI~1\
tu as dit que tu as listé les cartes dans ton dossier, elles sont dans un fichier txt ?

Re: Fonction permétant de compresser element un a un

Posté : 23 mars 2010 23:32
par jah
-ms : correspond à la compression d'Archive solide
-mx=9 : ceci à sont taux de compression
-mmt : faire appel à l'utilisation de mon dualcore
-m0d=128m : Utilisation du dictionnaire 128 de 7zip

par cette commande "C:\Program Files\7-Zip\7z.exe" j'appel 7zip.exe pour exécuter les commandes si dessus .
Se qui ressemble à ça,

Code : Tout sélectionner

"C:\Program Files\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "89_OUEST - Yonne.7z" "D:\MESDOC~1\MESMED~1\CARTEI~1\89_OUEST - Yonne"
Pour ta deuxieme question, non les carte ne sont pas au format texte (txt) mais j'ai lister leurs dossier à l'aide la commande dir *.* /b D:\MESDOC~1\MESMED~1\CARTEI~1\ >>nomdufichiertexte.txt
et ce chemin "D:\MESDOC~1\MESMED~1\CARTEI~1\" correspond à "D:\Mes documents\Mes Medias\Carte IGN TOP25"

A tu une réponse pour moi si il te plait ?

Bonne soirée

Re: Fonction permétant de compresser element un a un

Posté : 24 mars 2010 09:56
par Laddy
Rebonjour,

je comprend toujours pas ton problème. Si tu souhaites zipper tous les fichiers contenus dans ton txt en une seule étape, tu dois effectuer une boucle for.

Code : Tout sélectionner

@ECHO OFF
::ZIP tout les fichiers indiqués dans le txt provenant du réperoitre D:\....
for /f "tokens=* delims= " %%a in ('type nomdufichiertexte.txt') do  "%ProgramFiles%\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "%%a.7z" "D:\MESDOC~1\MESMED~1\CARTEI~1\"
En espérant avoir répondu à ta question :roll:

Re: Fonction permétant de compresser element un a un

Posté : 24 mars 2010 11:40
par jah
Merci a toi laddy pour ta patience,

ta fonction semble aussi intéressante mais ça n'ai pas ça . Si j'ai compris a peut pres ce code, il permet de compresser tout les élément contenu dans une archive.
Pour toutes erreurs j'ai essayé sur un autre dossier , mais ça ne pas marché .
Aurais tu la gentillesse de m'expliquer ton code , car en langage batch je démarre de hier , avant je n'appliquer à mes bat que des petites commande msdos.

Voici le chemin des éléments a compresser

Code : Tout sélectionner

C:\Documents and Settings\user\Bureau\Astase PowerBatch 6
et voici mon code batch (copie/coller sur le tien)

Code : Tout sélectionner

@ECHO OFF
::ZIP tout les fichiers indiqués dans le txt provenant du répertoire D:\....
for /f "tokens=* delims= " %%a in ('type nomdufichiertexte.txt') do  "%ProgramFiles%\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "%%a.7z" "C:\Documents and Settings\user\Bureau\Astase PowerBatch 6"
.

Pour ce qui est de mon code cité plus haut, il permet de compresser non pas le tout dans un bloc.zip,7zip et autres mais de compresser chacun des dossiers (sous dossier) présent dans celui ci .

Admettons que je souhaite compresser trois dossiers séparément (et leurs éléments) mais se trouvant dans le même dossier
Ceci ressemble simplement a un dossier contenant des sous dossier ..( éléments) pour ça j'ai pas d'autre choix que de séparer les lignes de commande puis que chaque dossier n'a pas le même nom, ni meme les même éléments comprise dedans .
Ex: Dans mon dossier WAMP placé comme ça "C:\wamp" je veux compresser les sous dossier "alias", "bin", et "apps"
mon chemin sera bien renseigné ainsi ? et sera traité solens ces commandes :
C:\wamp\alias "%ProgramFiles%\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "%%a.7z
C:\wamp\bin "%ProgramFiles%\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "%%a.7z
C:\wamp\apps "%ProgramFiles%\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m" "%%a.7z.

A Terme j'aimerais que ce même fichier Batch puisse:
- Que les archives 7z soit placer dans un sous dossier nommé archive pour exemple.
- Générer un log renseignant les fichiers manquants et ceux traité , les échecs (si possible leurs raisons).
- et plus tard (une fois mon batch oppérationnel et sur) supprimer tiout les dossier qu'il vient de traiter.

Je pense avoir tout expliqué (et en détail ;) )
Merci a toi laddy pour ton aide

Re: Fonction permétant de compresser element un a un

Posté : 24 mars 2010 19:53
par Laddy
Bonjour

je regade demain il est tard.

Re: Fonction permétant de compresser element un a un

Posté : 25 mars 2010 15:42
par jah
Merci a toi. J'attend ton aide :D

Re: Fonction permétant de compresser element un a un

Posté : 25 mars 2010 15:43
par Laddy
Ce code permet de zipper tous les dossiers contenus dans le dossier wamp de ton exemple.
Les archives 7z sont mise dans un dossier archives dans C:\Wamp.

Code : Tout sélectionner

@ECHO 0ff
::ZIP tout les fichiers indiqués dans le txt provenant du réperoitre c:\wAMP....
for /f "tokens=* delims= " %%a in ('Dir /B /AD "%systemdrive%\wamp\"') do  (
"%ProgramFiles%\7-Zip\7z.exe" a -ms -mx=10 -mmt -m0d=128m "%systemdrive%\wamp\archives\%%a.7z" "%systemdrive%\wamp\"
)
pause
Pour la gestion des erreurs : voir IF %ERRORLEVEL%.

Code / Meaning
0 / No error
1 / Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.
2 / Fatal error
3 / change identified (does this indicate a change in the archive file itself or a difference when comparing archive file contents to the original source?)
7 / Command line error
8 / Not enough memory for operation
255 / User stopped the process

Re: Fonction permétant de compresser element un a un

Posté : 25 mars 2010 19:02
par jah
Salut Laddy, je début en batch et ne comprend pas toujours le code. Aurais tu la gentillesse de me décrire ton code ?

Merci pour tout

Re: Fonction permétant de compresser element un a un

Posté : 25 mars 2010 20:08
par Laddy
Bonsoir,
il faudrait que tu apprennes les bases du batch, pour connaitre le fonctionnement des boucles for. Et surtout regarder l'aides des différentes commandes :

dir /?
for /?

'Dir /B /AD "%systemdrive%\wamp\" = liste tous les répertoires (/AD) avec leur chemin court (/B)

Fonction for :
Cette fonction for permet de pouvoir parcourir un ensemble de lignes dans un fichier, et d'éxécuter des actions pour l'élément parcouru.

Lire http://www.batcher.fr/fonctions.php#for

Pour chaque fichier doté de la variable %%variable dans (commande ou fichier) faire action
for /f %%a in (command) do action %%a
/f permet de répéter la meme action autant de fois que nécessaire en fonction de la commande ou txt
for /f %%a in (lister les dossiers du dossier c:\wamp) faire compression du dossier %%a dans le dossier C:\Wamp\archives des différents dossiers contenu dans C:\Wamp (voir syntaxe aide de 7zip)
%%a prendra à tour de rôle le nom du dossier trouvé par la commande dir, pour réaliser l'action zip -a %a.7z

%systemdrive% = variable d'environnement
%programfiles% = variable d'environnement

obtenir les variables d'environnements d'un pc : TAPER SET valide par enter dans une invite de commande
voir aussi le wikipedia,