windowsbatch-file

creating batch script to unzip a file without additional zip tools


I'm trying to make a .bat script for windows 7 x64 to create a folder, unzip a file into that folder without having to use additional addons like 7zip or unzip. Been searching and it seemed like windows doesn't have builtins to allow unzip easily in command. Can I unzip/expand files without additional addons?


Solution

  • Try this:

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    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 /a /f %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
    %SystemRoot%\System32\cscript.exe //nologo %vbs%
    if exist %vbs% del %vbs%
    

    Revision

    To have it perform the unzip on each zip file creating a folder for each use:

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

    If you don't want it to create a folder for each zip, change
    Call :UnZipFile "C:\Temp\%%~na\" "c:\path\to\%%~nxa" to
    Call :UnZipFile "C:\Temp\" "c:\path\to\%%~nxa"