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...
Windows 10 inclut tar.exe :
# example 1
tar.exe -a -c -f out.zip in.txt
# example 2
tar.exe -x -f out.zip
Si vous avez un ancien système Windows, vous pouvez toujours télécharger à partir de libarchive/libarchive .
PowerShell a Compresser l'archive :
# example 1
Compress-Archive in.txt out.zip
# example 2
Expand-Archive out.zip
Pour les deux outils, vous pouvez utiliser un fichier ou un répertoire pour l'entrée.
J'ai combiné ce script provenant de plusieurs sources différentes pour mieux répondre à mes besoins. Copiez et collez le script dans un fichier avec l'extension ".vbs". Le script a été créé à l'origine pour Windows XP, mais il fonctionne également sous Windows 7 x64 Ultimate - aucune garantie que Windows conservera les différents objets script utilisés.
Utilisation : dans la boîte d'exécution ou la ligne de commande, mettez-
"C:\zipper.vbs" "C:\folderToZip\" "C:\mynewzip.zip"
Chemin vers script, dossier source, fichier zip à créer (inclure .zip à la fin).
Il ne copiera pas les dossiers vides, alors faites attention.
Voici le code vbs ---
Set Args = Wscript.Arguments
source = Args(0)
target = Args(1)
' make sure source folder has \ at end
If Right(source, 1) <> "\" Then
source = source & "\"
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set zip = objFSO.OpenTextFile(target, 2, vbtrue)
' this is the header to designate a file as a zip
zip.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
zip.Close
Set zip = nothing
wscript.sleep 500
Set objApp = CreateObject( "Shell.Application" )
intSkipped = 0
' Loop over items within folder and use CopyHere to put them into the zip folder
For Each objItem in objApp.NameSpace( source ).Items
If objItem.IsFolder Then
Set objFolder = objFSO.GetFolder( objItem.Path )
' if this folder is empty, then skip it as it can't compress empty folders
If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
intSkipped = intSkipped + 1
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Else
objApp.NameSpace( target ).CopyHere objItem
End If
Next
intSrcItems = objApp.NameSpace( source ).Items.Count
wscript.sleep 250
' delay until at least items at the top level are available
Do Until objApp.NameSpace( target ).Items.Count + intSkipped = intSrcItems
wscript.sleep 200
Loop
'cleanup
Set objItem = nothing
Set objFolder = nothing
Set objApp = nothing
Set objFSO = nothing
Il est possible d'exécuter le script PowerShell à partir de BAT. Le fichier BAT reçoit en paramètre le chemin du répertoire à zipper et le nom du fichier zip.
@echo off
setlocal
rem First parameter - path to dir to be zipped
rem Second parameter- zip file name
set sourceDir=%1
set zipFile=%2
rem Create PowerShell script
echo Write-Output 'Custom PowerShell profile in effect!' > %~dp0TempZipScript.ps1
echo Add-Type -A System.IO.Compression.FileSystem >> %~dp0TempZipScript.ps1
echo [IO.Compression.ZipFile]::CreateFromDirectory('%sourceDir%','%~dp0%zipFile%') >> %~dp0TempZipScript.ps1
rem Execute script with flag "-ExecutionPolicy Bypass" to get around ExecutionPolicy
PowerShell.exe -ExecutionPolicy Bypass -Command "& '%~dp0TempZipScript.ps1'"
del %~dp0TempZipScript.ps1
endlocal
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.