Ungzip all gz files in Windows

2

1

I have many .gz files and I want to unzip all of them keeping their name and folder nesting.

How can I do this with Windows? Does 7zip have functionality that could complete this?

Tobia

Posted 2016-08-10T13:28:47.747

Reputation: 2 022

I'm looking for an alternative to use a single command line, I know that this is possibile in Linux using gunzip. If that is not possibile, your answer will be the best solution... – Tobia – 2016-08-21T07:19:34.677

Answers

2

This is the full recursive solution.

@ECHO ON

SET SourceDir=C:\source
FOR /R %SourceDir% %%A IN ("*.gz") DO 7z x "%%~A" -o"%%~pA\"

This doesn't delete original .gz files, I think it can be done with some 7z parameter or simply adding a delete %%~A command in the FOR loop

Tobia

Posted 2016-08-10T13:28:47.747

Reputation: 2 022

4

You can use the x switch and the -o switch with a simple FOR loop using 7zip to complete this task using substitutions accordingly.

The x switch switch tells 7zip to extract files with the full paths. The -o switch specifies the full path to the output directory. The FOR loop %%~NA tells it to name the extracted folder to the same name of the original gz file minus the .gz file extension.

Batch Script Example

@ECHO ON

SET SourceDir=C:\SourceFolder
SET OutputDir=C:\OutputFolder
FOR %%A IN ("%SourceDir%\*.gz") DO 7z x "%%~A" -o"%OutPutDir%\%%~NA"
::::FOR %A IN ("%SourceDir%\*.gz") DO 7z x "%~A" -o"%OutPutDir%\%~NA"
GOTO EOF

Further Resources

In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string
  • 7z --help
Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...]
       [<@listfiles...>]

<Commands>
  a : Add files to archive
  b : Benchmark
  d : Delete files from archive
  e : Extract files from archive (without using directory names)
  h : Calculate hash values for files
  i : Show information about supported formats
  l : List contents of archive
  rn : Rename files in archive
  t : Test integrity of archive
  u : Update files to archive
  x : eXtract files with full paths

<Switches>
  -- : Stop switches parsing
  -ai[r[-|0]]{@listfile|!wildcard} : Include archives
  -ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
  -ao{a|s|t|u} : set Overwrite mode
  -an : disable archive_name field
  -bb[0-3] : set output log level
  -bd : disable progress indicator
  -bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
  -bt : show execution time statistics
  -i[r[-|0]]{@listfile|!wildcard} : Include filenames
  -m{Parameters} : set compression Method
    -mmt[N] : set number of CPU threads
  -o{Directory} : set Output directory
  -p{Password} : set Password
  -r[-|0] : Recurse subdirectories
  -sa{a|e|s} : set Archive name mode
  -scc{UTF-8|WIN|DOS} : set charset for for console input/output
  -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
  -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
  -sdel : delete files after compression
  -seml[.] : send archive by email
  -sfx[{name}] : Create SFX archive
  -si[{name}] : read data from stdin
  -slp : set Large Pages mode
  -slt : show technical information for l (List) command
  -snh : store hard links as links
  -snl : store symbolic links as links
  -sni : store NT security information
  -sns[-] : store NTFS alternate streams
  -so : write data to stdout
  -spd : disable wildcard matching for file names
  -spe : eliminate duplication of root folder for extract command
  -spf : use fully qualified file paths
  -ssc[-] : set sensitive case mode
  -ssw : compress shared files
  -stl : set archive timestamp from the most recently modified file
  -stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
  -stx{Type} : exclude archive type
  -t{Type} : Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
  -v{Size}[b|k|m|g] : Create volumes
  -w[{path}] : assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
  -y : assume Yes on all queries

Pimp Juice IT

Posted 2016-08-10T13:28:47.747

Reputation: 29 425

I got a batch error for parameter "%~NA" – Tobia – 2016-09-22T10:08:05.983

That was good but not for recursive path, I add another solution with recursive path. Thank you – Tobia – 2016-09-22T11:03:17.390

1

Winrar has the ability to do this, in the context shell, if you have winrar installed and had it add context menu items, if you highlighted all your archives and then right click, it presents the option to extract each archive into their own separate folder. Whether you use 7zip like the above answer describes from @PIMP_JUICE_IT or Winrar both can accomplish what you are looking for, just one is graphical and the other is not but do as you are wanting.

Frostalf

Posted 2016-08-10T13:28:47.747

Reputation: 429