328 votes

Comment pouvez-vous compresser ou décompresser depuis le script en utilisant UNIQUEMENT les capacités intégrées de Windows?

Sur Windows, vous pouvez compresser certains fichiers en

cliquant droit → Envoyer versDossier compressé (zippé)

Et décompresser en double-cliquant sur le fichier .zip et extraire les fichiers.

Existe-t-il un moyen d'appliquer ces fonctionnalités depuis un script (.bat) sans avoir besoin d'installer un logiciel tiers?

32voto

Monir Points 1074

Utilisation de 7-Zip:

Zip: vous avez un dossier foo, et vous voulez le compresser en myzip.zip

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.zip -w foo -mem=AES256

Unzip: vous voulez le décompresser (myzip.zip) dans le répertoire courant (./)

"C:\Program Files\7-Zip\7z.exe" x  myzip.zip  -o./ -y -r

8voto

Steven Penny Points 18523

PowerShell peut le faire

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')

8voto

Hariboo Points 1

Vous pouvez utiliser un script VBScript enveloppé dans un fichier BAT. Ce code fonctionne sur un CHEMIN relatif.

Il n'est pas nécessaire d'utiliser des outils tiers ou des dépendances. Définissez simplement SOURCEDIR et OUTPUTZIP.

Nom du fichier : ZipUp.bat

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

' Créer un fichier ZIP vide.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipup.vbs

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs

echo ' Attendre que la compression soit terminée
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo     WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs

Exemple d'utilisation

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp

Alternativement, vous pouvez paramétrer ce fichier en remplaçant la ligne CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP% par CScript _zipup.vbs %1 %2, auquel cas il peut être encore plus facilement appelé en appelant simplement CALL ZipUp C:\Source\Dir C:\Archive.zip.

7voto

LostUser Points 69

J'ai cherché à répondre exactement à cette question et selon mes recherches, la réponse de DiryBoy semble être correcte.

J'ai trouvé le programme compact.exe qui compresse des fichiers mais pas pour créer un fichier (ou un ensemble de fichiers) fortement compressé. C'est similaire à l'option que vous obtenez lorsque vous cliquez avec le bouton droit sur une lettre de lecteur ou une partition dans Windows. Vous avez l'option de nettoyer (supprimer les fichiers temporaires, etc.) ainsi que de compresser des fichiers. Les fichiers compressés restent accessibles mais sont simplement compressés pour créer de l'espace sur un lecteur qui est faible en espace.

J'ai également trouvé compress.exe que j'avais effectivement sur mon ordinateur. Il n'est pas nativement sur la plupart des machines Windows et fait partie du 2003 resource kit. Cela crée un fichier zip de sorte mais il est vraiment plus similaire à des fichiers à partir d'un disque d'installation Windows (a le souligné comme dernier caractère de l'extension de fichier ou nom). Et la commande extract.exe extrait ces fichiers.

Cependant, le mantra est que s'il peut être fait nativement via l'interface graphique, il y a probablement un moyen de le faire via un fichier batch, .vbs, ou un autre type de script dans la ligne de commande. Depuis que Windows a eu l'option 'envoyer à' pour créer un fichier zip, je savais qu'il devait y avoir un moyen de le faire via la ligne de commande et j'ai trouvé quelques options.

Voici un excellent lien qui montre comment compresser un fichier en utilisant des commandes natives de Windows.

https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili

Je l'ai testé avec un répertoire contenant plusieurs fichiers et dossiers imbriqués et cela a parfaitement fonctionné. Suivez simplement le format de la ligne de commande.

Il y a aussi un moyen de décompresser les fichiers via la ligne de commande que j'ai également trouvé. Une méthode ouvre simplement une fenêtre d'explorateur montrant le contenu du fichier zip. Certains utilisent également Java qui n'est pas forcément natif à Windows mais est si courant qu'il semble presque l'être.

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

Comment dézipper un fichier en utilisant la ligne de commande ?

5voto

eddyoc Points 130

Si vous devez le faire dans le cadre d'un script, la meilleure façon est d'utiliser Java. En supposant que le répertoire bin est dans votre chemin (dans la plupart des cas), vous pouvez utiliser la ligne de commande :

jar xf test.zip

Si Java n'est pas dans votre chemin, référencez-le directement :

C:\Java\jdk1.6.0_03\bin>jar xf test.zip

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