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?
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"
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.
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
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
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.