7-Zip. 7z.exe is used to compress, extract and update files through the command line. It provides superior compression, and can improve many archiving tasks.
Program info. 7-Zip is open-source—this makes it easy to obtain. This document covers some common command lines (focused on Windows, but applicable to any OS).
Intro section. Note that if you already have 7z, you can skip this section. Download the 7-Zip command line executable: 7z.exe. This is the exe you will use to run commands on archives.
Tip For convenience and so you don't need to change environment paths, put the 7za.exe file in your user directory.
Next Open the Windows console and test the 7z.exe program out with a few commands. Type in the exe name 7z and this will display.
Here We see the grammar we need to use with 7z.exe. The "command" is the main verb.
Info Then you specify optional switches, the archive name (source or destination) and files. My user directory is "C:\Users\Sam\."
7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21
Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [@listfile]
<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 and @listfile 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
-mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
-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 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
-sse : stop archive creating, if it can't open some input file
-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
Command A. To start, "a" indicates archive (or add) and it is the most important command. Use the single letter "a" second in the command line. Use it to put files in an archive.
Detail You have to specify the destination archive, and the source files (in that order).
Note On the test system, "C:\Users\Sam" contains 2 files (file1.txt and file2.txt). The command puts those 2 files in an archive.
C:\Users\Sam>7z a -t7z files.7z *.txt
7-Zip (A) [...]
Scanning
Creating archive files.7z
Compressing file1.txt
Compressing file2.txt
Everything is Ok
C:\Users\Sam>
Command E. To continue, "e" is next most important command (second to "a"). The "e" stands for extract, and it means to unzip or expand an archive. We must specify the source archive.
Info The "e" command extracts everything to a specified directory. Another command "x" can preserve directory structures in archives.
Tip 7-Zip will always prompt you if there is a file it needs to overwrite to extract the new file. Use -y to skip the prompt.
7z e archive.zip
7z: executable
e: use extract command
archive.zip: source archive you want to expand
Command L. The lowercase L is used to list the contents of archives. You probably will not need to use it often. I thought I would test it and show an example.
Next This shows the listing of a solid archive. The originals are 27216 bytes and 3888 bytes. They compress down to 1030 bytes.
Command D. We use the "d" command in 7-Zip command lines. This stands for delete. It allows you to remove a certain file (or set of files) from inside an archive.
Note You will need this if you use huge archives and need to save time. This is from the manual.
Tip You can also remove a single file from an archive with "d." This is more useful when you do not have a solid archive.
7z d archive.zip *.bak -r
7z: use executable
d: delete files
archive.zip: delete from this archive
*.bak: only match bak files
-r: traverse all subdirectories
Command T. Here we use the "t" command in the 7z program. This command allows you to test the integrity of archives. It stands for "test" and is much less useful than the "-t" switch.
Warning Do not confuse the two. This one is used for diagnostics. We usually want the hyphen "-t."
7z t archive.zip *.doc -r
7z: use this executable
t: test the specified archive
archive.zip: the archive you want to test
*.doc: test all these files in the archive
-r: recurse all child directories
Command U. This stands for update. This command replaces old files in your archive with newer files. This prevents needing to decompress and recompress the entire archive.
Warning The "u" command doesn't work with solid archives. A solid archive is one where all the files are compressed together.
So You cannot update specific files in solid archives with the "u" command. Solid archives are limited.
7z u archive.zip *.doc
7z: executable name
u: update command
archive.zip: archive you want to update files in
*.doc: only update these files (Word documents)
Switch m. We can change the optimization settings in 7-Zip on the command line. This is the most important and useful option you can use. The "m" specifies the method of compression.
Switch -mx0: Don't compress at all.
This is called "copy mode."
Switch -mx1: Low compression.
This is called "fastest" mode.
Switch -mx3: Fast compression mode.
Will automatically set various parameters.
Switch -mx5: Same as above, but "normal."
Switch -mx7: This means "maximum" compression.
Switch -mx9: This means "ultra" compression.
You probably want to use this.
Command X. This command is like "e" except it preserves the full paths. If you have an elaborate or important directory structure, use this option. This would be most useful for backups.
7z x archive.zip
7z: executable name
x: use the extract command
archive.zip: the archive you want to extract all the files from
Switch T type. Here we show how to specify the archive type. Note that you can specify any file name you want for any type. But some extensions are recommended—they are standard.
Switch: -t7z
Format: 7Z
Example filename: archive.7z (default option)
Switch: -tgzip
Format: GZIP
Example filename: archive.gzip, archive.gz
Switch: -tzip
Format: ZIP
Example filename: archive.zip (compatible)
Switch: -tbzip2
Format: BZIP2
Example filename: archive.bzip2
Switch: -ttar
Format: TAR
Example filename: tarball.tar (UNIX and Linux)
Switch: -tiso
Format: ISO
Example filename: image.iso (may not be supported)
Switch: -tudf
Format: UDF
Example filename: disk.udf
Type switch examples. The 7-Zip manual shows the -tiso and -tudf switches. These are not the most common. Almost all of the examples in this document use -t switches.
7z a -tiso archive.iso
7z a -tudf archive.udf
7z: executable name
a: add to archive
-tiso or -tudf: format of archive to create
archive.iso or archive.udf: name of archive to create
Example commands. Here I show the example compression commands from the 7-Zip manual. I demonstrated simple ones at the start of this document. These are more complex.
7z a -tzip archive.zip *.jpg -mx0
7z: name of executable
a: add to archive command
-tzip: specify a ZIP archive (useful for compatibility)
archive.zip: destination archive
*.jpg: only add jpg files to archive
-mx0: don't compress, just copy
useful for already-compressed files
Example of 7z format. This next command line shows how to create a solid 7z archive of program files (executables). It uses multithreading mode, which means it will be fast.
7z a -t7z archive.7z *.exe *.dll -ms -mmt
7z: name of executable
a: archive command specified
-t7z: use 7z file type (less compatible and smaller results)
archive.7z: destination archive file
*.exe: include all *.exe files in directory in new archive
*.dll: include all *.dll files in new archive
-ms: create solid archive (default)
-mmt: multithread the operation (faster)
Create PPMd archive. PPMd is an extraordinary algorithm for compressing text. Here I show a command in the 7-Zip manual that compresses all the text files in the working directory.
Tip The command is useful because you will normally want to compress only text files with PPMd.
7z a -t7z archive.7z *.txt -m0=PPMd
7z: executable name/path
a: add command specified
-t7z: use the 7z format (needed for PPMd)
archive.7z: destination archive file
*.txt: select all text files
-mo=PPMd: compress with this algorithm
Switch O. Sometimes you do not want to extract to the current directory. This is where -o can help. Use this to set the destination directory.
7z x archive.zip -oC:\Doc
7z: executable name
x: extract archive with paths intact
archive.zip: archive to extract files from
-oC:\Doc: extract all files to the Doc folder on the C: drive
Switch P. We can use the "-p" switch, which refers to the word "password." This is really helpful when security and encryption is involved. You can specify a password on the command line.
7z a pw.7z *.txt -pSECRET
7z: name and path of 7-Zip executable
a: add to archive
pw.7z: name of destination archive
*.txt: add all text files to destination archive
-pSECRET: specify the password "SECRET"
Password-protected archives. This next console output shows what happens when you try to open the password-protected archive. The password here is SECRET.
Info Add -mhe to encrypt headers. The password command will automatically deal with encrypted headers.
Tip Remember, encrypted headers will hide the names of the files in your archive.
C:\Users\Sam>7za x pw.7z
7-Zip (A) 4.60 beta Copyright (c) 1999-2008 Igor Pavlov 2008-08-19
Processing archive: pw.7z
Enter password:
Case-sensitive. We can use case-insensitive file names. For cross-platform stuff, the case-sensitive option is useful. I will show my own example here with some explanation.
Here We specify case-sensitive mode. The default is "-ssc-" on Windows (insensitive) and "-scc" on Linux (sensitive).
7z.exe a archive.7z Z*.* -ssc
7z.exe: 7-Zip command-line executable path and name
a: archive command
archive.7z: add files to this target archive
Z*.*: select only files whose first letter is a capital Z
-ssc: case-insensitive matching
Switch ao. The "ao" switch allows you to specify whether you want to overwrite old files. Be careful—you cannot restore an overwritten file normally. This switch takes another argument.
Info With -aoa we overwrite all destination files. Use it when the new versions are preferred.
And With -aos we skip over existing files without overwriting. Use this for files where the earliest version is most important.
7z x test.zip -aoa
7z: use the 7-zip executable
x: use the extract command
test.zip: extract files from this archive
-aoa: overwrite all existing files
Multiple files. To add many files to one archive, please use the "a" command and the wildcard "*" symbol. Specify the name of the destination archive file and the source files afterwards.
Tip To add many files from an entire subdirectory, specify just the directory name. You do not need to use a wildcard.
Here This command specifies an entire directory called "subdir." We include the trailing slash.
7z a -tzip archive.zip subdir\
7z: use executable
a: add to archive
-tzip: use zip compression
archive.zip: create this archive
subdir\: source directory
Output directory. Use the "e" command and combine it with the -o switch. The syntax with -o is a bit difficult—this is the example from the 7-Zip help file.
7z e archive.zip -oC:\soft *.cpp -r
7z: executable
e: use extract command
archive.zip: source archive you want to extract from
-oC:\soft: the destination folder
(-o is the switch and C:\soft is the argument)
*.cpp: only extract cpp files (C++)
-r: traverse all subdirectories
Switch V. In data compression, a volume is a segment of a data set that is a certain number of bytes long. The volume switch specifies the exact size in bytes, kilobytes or megabytes.
Also You can specify sequential volumes with the "v" switch on the 7z.exe command line.
More switches. Here we take a closer look at more switches that are of limited use. They are sometimes useful to know. Usually you can do better just by using the defaults.
Tip With -ssw we compress locked files. You can try this if you have problems opening files.
And With -w we set the working directory. You can use this when you want to specify temporary folders.
Solid archives. 7z is the only file format in 7-Zip that you can specify whether the archive is solid or not. Solid makes it impossible to use the "u" command to update individual files.
Tip With -mson we enable solid mode. This is the default so you won't often need to specify it.
And With -msoff we disable solid mode. Useful when you need to update individual files.
7z archives. Some things you can change are dictionary sizes, FastBytes values, MatchFinder values, and filters. Normally you don't need to deal with these.
How do I add many files with a specific extension? Use the "a" command and the wildcard "*" symbol, but specify the extension after the wildcard.
Detail For example, "*.txt" means all text files. You can use the wildcard anywhere.
How do I use BZip2? You can use BZip2 by specifying the "-tbzip2" switch. This can be combined with any compression level. The modes in 7-Zip automatically use many different settings.
How do I use 7z format? Specify the "-t7z" switch for type. Or you can simply omit the type switch and that will default to 7z. This format offers the greatest compression ratios.
Prompts. You can stop 7-Zip from displaying prompts. Please use the -y switch. This will assume a yes answer to all prompts. Use this only when you are confident.
Why can't I update my archive? It is probably a solid archive. 7z archives are by default solid archives—all the files are compressed together.
Tip Change the archive not to be solid if you want to update it. Search this page for "solid."
How can I see what's inside an archive? Use the "l" command. You might want to use "l" in a utility that you run from a command line to make sure your batch archiving properly works.
How can I exclude certain files? Sometimes you want to manually exclude certain files. Use the "-x" switch, followed immediately with an exclamation mark and then the file name.
So If you want to exclude "file1.txt," use the switch "-x!file1.txt." Please include the hyphen and exclamation.
How can I replace files? This is done with the "-ao" switch. There are other options, and it is usually a better idea to use one of the renaming options (-aou or -aot).
Can I ignore extracting files already on disk? Yes—specify the -aos option, which means "skip overwriting files." This will cause 7z.exe to not copy the newer files out of the archive.
Note Use "-aos" if your files don't change over time and overwriting would just be a waste.
7-Zip can be used on the command line. We created new archives, added to existing archives, used different formats, and used various strengths.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Dec 19, 2023 (simplify).