131 votes

Pouvez-vous compresser un fichier depuis l'invite de commandes en utilisant UNIQUEMENT la capacité intégrée de Windows à compresser des fichiers?

J'ai un fichier batch qui génère un fichier texte. Je pensais que ce serait bien si je pouvais aussi le compresser.

Ceci sera utilisé dans un environnement non contrôlé, donc je ne peux pas faire d'hypothèses sur la présence de produits logiciels tiers tels que 7-Zip, etc. Il est nécessaire d'utiliser la capacité de compression de fichiers intégrée à Windows.

1 votes

Pouvez-vous utiliser PowerShell ou un script WSH ? Cela pourrait être le seul moyen d'utiliser la gestion intégrée des fichiers zip de Windows en ligne de commande. Sinon, comme l'a souligné Molly, vous aurez besoin d'un outil tiers.

2 votes

Ainsi, vous envoyez à quelqu'un un fichier batch et vous ne pouvez pas lui envoyer un petit fichier gzip.exe statiquement lié ?

0 votes

La question de l'OP est excellente (accusation étrange de @quackquixote mise à part). Puisque Windows fournit cela en un seul clic sous SendTo, il devrait y avoir une commande utilisable dans un fichier BAT. C'est donc une bonne question même si la réponse est non et qu'il faut (ridiculement) recourir à l'utilisation d'un outil tiers qui peut être équivalent ou non.

2voto

kayleeFrye_onDeck Points 220

Ceci est une mutation de la réponse acceptée. Je réalise une tonne de tâches d'automatisation sur des milliers de fichiers à la fois, donc je ne peux pas simplement attendre 2 secondes et ne pas m'en soucier. J'ai trouvé le contournement ici, qui est également similaire à la réponse de Jirí Kocara ici.

Cela va faire "pinguer" le dossier de destination toutes les 200 ms, ce qui est approximativement aussi rapide que ce que Microsoft recommande pour vérifier les mises à jour du système de fichiers.

Set parameters = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
SourceDir = FS.GetAbsolutePathName(parameters(0))
ZipFile = FS.GetAbsolutePathName(parameters(1))
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set shell = CreateObject("Shell.Application")
Set source_objects = shell.NameSpace(SourceDir).Items
Set ZipDest = shell.NameSpace(ZipFile)
Count=ZipDest.Items().Count
shell.NameSpace(ZipFile).CopyHere(source_objects)
Do While Count = ZipDest.Items().Count
    wScript.Sleep 200
Loop

1voto

npocmaka Points 1141

Voici ma tentative de résumer les capacités intégrées de compression et de décompression sous Windows - Comment puis-je compresser (/ zip) et décompresser (/ unzip) des fichiers et dossiers avec un fichier de commandes sans utiliser d'outils externes ? - avec quelques solutions données qui devraient fonctionner sur presque toutes les machines Windows.

En ce qui concerne le shell.application et WSH, j'ai préféré le JScript car il permet un fichier hybride batch/JScript (avec extension .bat) qui ne nécessite pas de fichiers temporaires. J'ai mis les capacités de décompression et compression dans un seul fichier ainsi que quelques autres fonctionnalités.

0voto

cowlinator Points 525

À partir de la version 1803 (mars 2018), Windows inclut tar.exe à C:\Windows\System32\tar.exe. Tar peut être utilisé pour créer et extraire des fichiers zip. Tapez tar /? pour plus d'informations.

-5voto

user228211 Points 11

La ligne de commande Windows fournit désormais la commande COMPACT qui, autant que je peux le dire, est native à Windows. Cela devrait répondre aux exigences demandées sauf si j'ai raté quelque chose.

11 votes

compact existe depuis XP et est un outil pour gérer la compression NTFS

0 votes

@user228211 votre réponse est excellente pour cette question "utilisez la capacité de compression intégrée à Windows". Ce devrait être l'une des meilleures réponses en raison de sa simplicité et de sa correspondance directe avec les questions. Je ne suis pas sûr pourquoi les gens votent négativement ????

2 votes

@LMSingh Êtes-vous un robot ? Parce que NTFS n'a absolument rien à voir avec zip.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X