Sous Windows, vous pouvez compresser certains fichiers en
clic droit → Envoyer à → dossier compressé (zippé)
Décompressez en double-cliquant sur le fichier .Zip
et extrayez les fichiers.
Existe-t-il un moyen d'appliquer ces capacités à partir d'un script (fichier .bat) sans avoir à installer de logiciel tiers?
En 2013, ce n'était pas possible. Microsoft n'a fourni aucun exécutable pour cela.
Voir ce lien pour un moyen VBS de le faire. https://superuser.com/questions/201371/create-Zip-folder-from-the-command-line-windows
À partir de Windows 8, .NET Framework 4.5 est installé par défaut, avec System.IO.Compression.ZipArchive et PowerShell disponibles, vous pouvez écrire des scripts pour y parvenir, voir https: //. stackoverflow.com/a/26843122/71312
Pour développer la solution PowerShell de Steven Penny, vous pouvez l’incorporer dans un fichier de commandes en appelant powershell.exe comme suit:
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar'); }"
Comme Ivan Shilo l'a dit, cela ne fonctionnera pas avec PowerShell 2, il nécessite PowerShell version 3 ou supérieure et .NET Framework 4.
À compter de . NET 4.5 , 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')
Pour les deux dernières lignes, bar
et foo
peuvent être remplacés par le nom que vous souhaitez attribuer au dossier, ou quel que soit le nom du dossier préexistant. foo.Zip
dans les deux cas, sert de fichier Zip à enregistrer ou à décompresser.
Si vous avez installé Java, vous pouvez compresser dans une archive Zip à l'aide de la commande jar
:
jar -cMf targetArchive.Zip sourceDirectory
c = crée un nouveau fichier archive.
M = Spécifie qu'un fichier manifeste ne doit pas être ajouté à l'archive.
f = Indique le nom du fichier cible.
De Microsoft.PowerShell.Archive
vous pouvez utiliser:
Par exemple.:
Créez _result.Zip
_ à partir du dossier entier Test
:
_Compress-Archive -Path C:\Test -DestinationPath C:\result
_
Extrayez le contenu de _result.Zip
_ dans le dossier Test
spécifié:
_Expand-Archive -Path result.Zip -DestinationPath C:\Test
_
Ce n'est pas exactement un zip, mais le seul moyen de compresser un fichier à l'aide des outils Windows est:
makecab <source> <dest>.cab
Pour décompresser:
expand <source>.cab <dest>
Exemple avancé (de ss64.com):
Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"
Plus d'informations: makecab , développer , tilisations avancées de makecab
tilisation de 7-Zip:
Zip: vous avez un dossier foo
et vous voulez le compresser à myzip.Zip
"C:\Program Files\7-Zip\7z.exe" a -r myzip.Zip -w foo -mem=AES256
Décompressez: vous voulez le décompresser (myzip.Zip
) dans le répertoire en cours (./
)
"C:\Program Files\7-Zip\7z.exe" x myzip.Zip -o./ -y -r
J'ai cherché à répondre à cette question précise et d'après mes recherches, la réponse de DiryBoy semble être exacte.
J'ai trouvé que le programme compact.exe compresse les fichiers mais pas pour créer un fichier fortement compressé (ou un ensemble de fichiers). Cette option est similaire à celle que vous obtenez lorsque vous cliquez avec le bouton droit sur une lettre de lecteur ou une partition dans Windows. Vous avez la possibilité de nettoyer (supprimer les fichiers temporaires, etc.) ainsi que de compresser les fichiers. Les fichiers compressés sont toujours accessibles mais ne le sont que pour créer de l'espace sur un lecteur disposant de peu d'espace.
J'ai aussi trouvé compress.exe que j'avais sur mon ordinateur. Ce n'est pas natif sur la plupart des machines Windows et fait partie du kit de ressources 2003. Cela crée un fichier compressé mais il ressemble beaucoup plus aux fichiers d'un disque d'installation Windows (le caractère de soulignement est le dernier caractère de l'extension ou du nom du fichier). Et la commande extract.exe extrait ces fichiers.
Toutefois, le mantra est le suivant: si cela peut être fait de manière native via l'interface graphique, il existe probablement un moyen de le faire via batch, .vbs ou un autre type de script dans la ligne de commande. Comme Windows avait l'option "envoyer à" pour créer un fichier Zip, je savais qu'il devait y avoir un moyen de le faire via une ligne de commande et j'ai trouvé quelques options.
Voici un excellent lien qui montre comment compresser un fichier à l’aide de commandes natives Windows.
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 existe également un moyen de décompresser les fichiers via une ligne de commande que j'ai également trouvée. Une solution consiste à ouvrir une fenêtre de l’explorateur indiquant le contenu du fichier compressé. Certains d'entre eux utilisent également Java, qui n'est pas nécessairement natif de Windows, mais qui est si courant qu'il semble presque l'être.
Comment décompresser un fichier en utilisant la ligne de commande?
Vous pouvez utiliser un script VBScript intégré dans un fichier BAT. Ce code fonctionne sur un PATH relatif.
Il n'est pas nécessaire d'utiliser des outils tiers ou des dépendances. Il suffit de définir SOURCEDIR
et OUTPUTZIP
.
Nom de 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
' Create empty Zip file.
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 ' Keep script waiting until compression is done
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
Vous pouvez également paramétrer ce fichier en remplaçant la ligne CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
par CScript _zipup.vbs %1 %2
, auquel cas il est encore plus facile de l'appeler en appelant simplement CALL ZipUp C:\Source\Dir C:\Archive.Zip
.
Open source est votre ami :-)
Voici le unzip : http://gnuwin32.sourceforge.net/packages/unzip.htm
Il existe également une commande Zip: http://gnuwin32.sourceforge.net/packages/Zip.htm
Les fichiers binaires suffisent.
Si vous avez besoin de faire cela dans le cadre d'un script, le meilleur moyen consiste à utiliser Java. En supposant que le répertoire bin se trouve dans votre chemin (dans la plupart des cas), vous pouvez utiliser la ligne de commande:
jar xf test.Zip
Si Java n'est pas sur votre chemin, faites-le directement référence:
C:\Java\jdk1.6.0_03\bin>jar xf test.Zip
Vous dites que vous essayez de le faire sans logiciel tiers. Je ne sais pas si vous envisageriez un logiciel "tiers" .NET.
Mais vous pouvez créer votre propre utilitaire de ligne de commande dans .NET. Cela ne devrait pas nécessiter plus que quelques lignes de code.
J'ai un problème avec toutes ces solutions. Ils ne sont pas pas exactement , et ils créent tous des fichiers qui présentent une légère différence de taille par rapport à la RMB --> send to --> compressed (zipped) folder
lorsqu'ils sont créés à partir du même dossier d'origine. La différence de taille la plus proche que j'ai eue est de 300 Ko (script> manuel), réalisée avec:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.Zip
(Remarquez le - CompressionLevel . Il y a trois valeurs possibles : Le plus rapide, Pas de compression & Optimal, (Par défaut: Optimal))
Je voulais créer un fichier .bat qui compresserait automatiquement un dossier de plug-ins WordPress sur lequel je travaille, dans une archive .Zip, afin que je puisse le télécharger dans le site WordPress et tester le plugin.
Mais pour une raison quelconque, cela ne fonctionne avec aucune de ces compressions automatiques, , mais cela fonctionne avec la compression manuelle RMB, que je trouve vraiment étrange.
Et les fichiers .Zip générés par script cassent les plugins WordPress au point qu’ils ne peuvent plus être activés et qu’ils ne peuvent pas non plus être supprimés de WordPress. Je dois SSH dans le "dos" du serveur et supprimer les fichiers du plugin téléchargés eux-mêmes, manuellement. Bien que les fichiers générés manuellement par RMB fonctionnent normalement.