Est-il possible de créer un fichier .zip à partir d'un dossier en ligne de commande ? Je ne veux pas utiliser d'exécutable tiers.
Je pensais à quelque chose comme "envoyer dans un dossier compressé", mais je ne sais pas comment faire...
Est-il possible de créer un fichier .zip à partir d'un dossier en ligne de commande ? Je ne veux pas utiliser d'exécutable tiers.
Je pensais à quelque chose comme "envoyer dans un dossier compressé", mais je ne sais pas comment faire...
Pour compresser un fichier à partir de CMD :
compact /c /exe lzx input.txt
(fonctionne sur les Volumes NTFS) La taille du fichier après compression est toujours la même en CLI dir
ou GUI File Properties
mais l'espace disque occupé est (6 à 8 fois) inférieur. Les fichiers compressés en binaire ne feront pas beaucoup de différence.
Pour le format de fichier ZIP de PKWare, le taux de compression est environ 4 fois plus élevé que compact
(d'après les tests effectués sur Win 10) et intègre une gamme d'algorithmes de compression tels que Deflate, BZip, LZW, LZMA, LZ77, PPMd, etc.
Ces technologies sont plus récentes que l'époque du DOS et du CMD, mais on peut toujours y accéder via des outils CLI plus récents comme Powershell, JScript, VBScript, etc.
Pour powershell à partir de Win CMD :
powershell "Compress-Archive input.txt output.zip"
o tar
dans Windows 10 :
Usage:
List: tar -tf <archive-filename>
Extract: tar -xf <archive-filename>
Create: tar -cf <archive-filename> [filenames...]
Help: tar --help
Voici un excellent lien qui montre comment compresser un fichier à l'aide des commandes natives de Windows.
Je l'ai testé avec un répertoire contenant plusieurs fichiers et dossiers imbriqués et cela a parfaitement fonctionné. Il suffit de suivre le format de la ligne de commande.
Il existe également un moyen de décompresser les fichiers via la ligne de commande que j'ai également trouvé. Une façon de faire est d'ouvrir une fenêtre d'exploration montrant le contenu du fichier zippé. Certains d'entre eux utilisent également Java qui n'est pas nécessairement natif de Windows mais qui est si commun qu'il en a l'air.
Est-ce que Windows 7 a unzip à la ligne de commande installé par défaut ?
https://stackoverflow.com/questions/1021557/how-to-unzip-a-file-using-the-command-line
Je vais poster quelque chose en rapport avec WSkids réponse car malheureusement je ne peux pas utiliser la fonction commentaire.
L'utilisation de la méthode CopyHere() en VBS pose plusieurs problèmes. L'un de ces problèmes est que la méthode retourne immédiatement alors que le processus de copie démarre en arrière-plan alors que de multiples appels à CopyHere() vont interférer entre eux et le ZIP ne sera pas créé correctement. Une boucle d'attente est nécessaire ici pour résoudre ce problème. Ma boucle d'attente est basée sur une réponse à une question similaire postée aquí .
Voici une version mise à jour qui corrige l'erreur "Object required" signalée par les utilisateurs du site. pihentagy . C'est un problème de timing car le fichier ZIP nouvellement créé est inclus dans la collection d'éléments lorsque le script est exécuté sur les machines rapides.
set Args = WScript.Arguments
source = Args(0)
' remove trailing slashes as we add slashes when needed later
while Right(source, 1) = "\"
source = Mid(source, 1, Len(source) - 1)
wend
target = Args(1)
' create empty ZIP file
set fso = CreateObject("Scripting.FileSystemObject")
set zip = fso.OpenTextFile(target, 2, vbtrue)
' write ZIP header, this ensures that Windows recognizes the file as "ZIP Folder"
zip.Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0))
zip.Close
set zip = nothing
set fso = nothing
' copy files to ZIP file
set app = CreateObject("Shell.Application")
set sourceFolderObj = app.NameSpace(source)
set targetFolderObj = app.NameSpace(target)
for each item in sourceFolderObj.Items
itemPath = source & "\" & item.Name
copyItem = false
' ZIP file is included in Items collection and is recognized as folder, thus skip it to avoid script errors
if itemPath <> target then
if item.IsFolder then
if item.GetFolder.Items().Count = 0 then
' folder is empty, skip it as empty folders can't be compressed
else
copyItem = true
end if
else
copyItem = true
end if
end if
if copyItem then
targetFolderObj.CopyHere item
' wait until the file appears in the ZIP file,
' this is needed because CopyHere() returns immediately after starting an asynchronous copy process
' (starting multiple asynchronous copy will not work as it causes error messages, an invalid ZIP file, ...)
while (targetFolderObj.ParseName(item.Name) is nothing)
WScript.Sleep 1
wend
end If
next
set targetFolderObj = nothing
set sourceFolderObj = nothing
set app = nothing
Il s'agit d'une vieille question, mais sa pertinence est toujours d'actualité.
Windows a bien sûr son propre algorithme de compression intégré pour l'utilisation des fichiers zip, mais ses performances sont médiocres par rapport au produit open source 7zip que vous trouverez ici. http://www.7-zip.org/
D'autres ont déjà discuté de différentes méthodes pour utiliser les fonctions intégrées de Windows, ma solution nécessite l'installation d'un logiciel supplémentaire.
7Zip prend en charge un large éventail de fichiers, notamment les formats ZIP, RAR, CAB et ISO, ainsi que son propre format 7z.
Vous pouvez consulter l'aide en ligne de commande : " C:\Program Fichiers \7 -Zip \7z.exe " --help
pour effectuer un simple ajout à une archive zip :
" C:\Program Fichiers \7 -Zip \7z.exe " a filename.zip c : \path
Voici une autre idée, tirée de 4 sources différentes ; ce ne sont pas mes idées, mais je les ai compilées pour que cela fonctionne pour moi.
<!-- : Begin batch script
@each off
set sourceFolder="c:\test"
set destZip="%userprofile%\desktop\example.zip"
cscript //nologo "%~f0?.wsf" //job:exewsh %sourceFolder% %destZip%
exit /b
GOTO:EOF
----- Begin wsf script --->
<package><job id="exewsh"><script language="VBScript">
'Get command-line arguments.
Set objArgs = WScript.Arguments
InputFolder = objArgs(0)
ZipFile = objArgs(1)
'Create empty ZIP file.
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set objShell = CreateObject("Shell.Application")
Set source = objShell.NameSpace(InputFolder).Items
objShell.NameSpace(ZipFile).CopyHere(source)
'Required!
wScript.Sleep 2000
</script></job>
</package>
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.