15

What is the command to unzip a file using 7z in powershell?

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
sz x  $zipfilePath $destinationUnzipPath -aoa -r;

The command works fine but it says no files to process, everything is Ok rather than unzipping the file?

mklement0
  • 382,024
  • 64
  • 607
  • 775
Deepanshu Kalra
  • 419
  • 2
  • 9
  • 23
  • 1
    With the benefit of hindsight: **The only problem turned out to be the syntax of the `7z.exe` command - the fact that `7z` was invoked from _PowerShell_ (via an alias) was _incidental_.** – mklement0 Mar 27 '17 at 11:09
  • Thanks I wanted to test a zip file. Your answer got me started. line1:sz t $zipfile line 2 echo $LASTEXITCODE #0 for success else http://7zip.bugaco.com/7zip/MANUAL/exit_codes.htm – JohnC Aug 04 '18 at 15:45

5 Answers5

11

This finally worked for me sz x -o$destinationUnzipPath $zipfilePath -r ;

Deepanshu Kalra
  • 419
  • 2
  • 9
  • 23
10

I didn't want to use aliases, functions or Start-Process. After a little looking around the web, I've found this gem (and I can't remember where):

& ${env:ProgramFiles}\7-Zip\7z.exe x $zipfilePath "-o$($destinationUnzipPath)" -y

And you can add a > $null at the end if you don't want to see 7z's messages!

João Ciocca
  • 776
  • 1
  • 10
  • 23
8

With 7zip PowerShell module, now it is hassle free

#   Install 7zip module

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Set-PSRepository -Name 'PSGallery' -SourceLocation "https://www.powershellgallery.com/api/v2" -InstallationPolicy Trusted
Install-Module -Name 7Zip4PowerShell -Force

#   Extract 7zip file

$sourcefile = "c:\source\sample.7z"
Expand-7Zip -ArchiveFileName $sourcefile -TargetPath 'c:\destinaation'
Prosenjit Sen
  • 326
  • 4
  • 7
  • If someone needs a code that works like clockwork on windows 7, windows 8 & 8.1, windows 10, this is the right one to use ;) The .Net version from microsoft is unreliable on some older windows OS. By the way this is what chocolatey package manager (chocolatey.org) use ! – jiciftw Mar 03 '21 at 02:37
1

My use case was slightly different because I had multiple tar files in a directory that needed to be extracted. I'm sharing it because same command may also be used or slighly modified to be used:

here is the command that worked for me on Windows 10 via Powershell:

Notice: you need to change the paths below for your use case of course.

$srcFolderPathWithTar="C:\SomeFilder\has\multiple\tar\files"
$targ="C:\Users\your_user_name\Downloads\new" 

. "C:\Program Files\7-Zip\7z.exe"  x "-o$($targ)" "$srcFolderPathWithTar" -r -y;
grepit
  • 21,260
  • 6
  • 105
  • 81
0

I used "fullname", which includes the path.
Also, I had to change my directory in PowerShell to the output directory of the extracted data, i.e. D:\temp

I refuse to believe that copying or extracting a bunch of files from disparate folders to a single location is a complicated task in this age.

$rars = (Get-ChildItem "D:\Path\To\folder" -Recurse *.rar).fullname
foreach ($rar in $rars) {& "C:\Program Files\7-Zip\7z.exe" e $rar}
Jorengarenar
  • 2,705
  • 5
  • 23
  • 60
p0wd3r
  • 1