web-dev-qa-db-fra.com

création d'un script batch pour décompresser un fichier sans outils Zip supplémentaires

J'essaie de créer un script .bat pour Windows 7 x64 afin de créer un dossier, décompressez un fichier dans ce dossier sans avoir à utiliser d'addons supplémentaires tels que 7Zip ou unzip. Je cherchais et il me semblait que Windows ne possédait pas de fonctions intégrées permettant de décompresser facilement le texte. Puis-je décompresser/développer des fichiers sans addons supplémentaires? 

28
JustinBieber

Essaye ça:

@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "C:\Temp\" "c:\path\to\batch.Zip"
exit /b

:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs%  echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%

Révision

Pour le décompresser sur chaque fichier Zip en créant un dossier pour chaque utilisation:

@echo off
setlocal
cd /d %~dp0
for %%a in (*.Zip) do (
    Call :UnZipFile "C:\Temp\%%~na\" "c:\path\to\%%~nxa"
)
exit /b

Si vous ne voulez pas qu'il crée un dossier pour chaque zip, changez Call :UnZipFile "C:\Temp\%%~na\" "c:\path\to\%%~nxa" en Call :UnZipFile "C:\Temp\" "c:\path\to\%%~nxa"

44
Matt Williamson

Voici une solution simple et rapide utilisant PowerShell:

powershell.exe -nologo -noprofile -command "& { $Shell = New-Object -COM Shell.Application; $target = $Shell.NameSpace('C:\extractToThisDirectory'); $Zip = $Shell.NameSpace('C:\extractThis.Zip'); $target.CopyHere($Zip.Items(), 16); }"

Cela utilise la fonctionnalité d'extraction intégrée de l'explorateur et affiche également la fenêtre de progression de l'extraction typique. Le deuxième paramètre 16 à CopyHere répond à toutes les questions par un oui.

6
Benjamin Krupp

Voici mon aperçu des fonctionnalités zi/unzip (compresser/décompresser) intégrées dans Windows - Comment puis-je compresser (/ Zip) et décompresser (/ décompresser) des fichiers et des dossiers avec un fichier de commandes sans utiliser d’outil externe?

Pour décompresser un fichier, vous pouvez utiliser ce script :

zipjs.bat unzip -source C:\myDir\myZip.Zip -destination C:\MyDir -keep yes -force no
2
npocmaka

Si vous avez PowerShell version 5.0 ou supérieure (préinstallé avec Windows 10 et Windows Server 2016):

powershell Expand-Archive your.Zip -DestinationPath your_destination
1
Artem

Une autre approche de ce problème pourrait consister à créer un fichier exécutable à extraction automatique (.exe) à l'aide de quelque chose comme Winzip et à l'utiliser comme vecteur d'installation plutôt que comme fichier Zip. De même, vous pouvez utiliser NSIS pour créer un programme d'installation exécutable et l'utiliser à la place du fichier Zip. 

1
John