Board logo

标题: 【分享】7-zip 命令行版本 用户手册 [打印本页]

作者: applba    时间: 2011-6-8 14:44     标题: 【分享】7-zip 命令行版本 用户手册

本帖最后由 applba 于 2011-6-8 15:06 编辑

首先申明
本人纯手工翻译,基于最新的 7z922自带英文手册翻译,保证最新。
90%忠于英文手册,剩下的10%是根据本人理解修改或自行添加的。
没有参考任何其他中文翻译,如有雷同,纯属巧合。
搜索了一下,发现我这个貌似是最好的,哈哈……


7-zip命令行版本 用户手册
7z.exe是7-zip的命令行版本。
它使用7-zip软件包里面的7z.dll,7z.dll同时被7-Zip文件管理器使用。
7za.exe是7-Zip的独立版,7za.exe不使用扩展模块7z.dll。
7za.exe 仅支持 7z, lzma, cab, zip, gzip, bzip2, Z 和 tar 格式。


1、基本用法介绍
1.1 命令行语法

7z <command> [<switch>...] <base_archive_name> [<arguments>...]
<arguments> ::= <switch> | <wildcard> | <filename> | <list_file>
<switch>::= <switch_symbol><switch_characters>[<option>]
<switch_symbol> ::= '/' | '-'
<list_file> ::= @{filename}

方括号[]中的表达式是可选的。
花括号{}中的表达式意味着表达式的取代,用户必须使用字符串来替换它。
::=表示取值形式和取值范围。
|表示他们之间互斥,一次只能使用其中一个。
Command 和 switch可以不区分大小写。
Command是第一个非switch参数。
"base_archive_name" 必须是命令行上Command后的第一个filename。
"base_archive_name" 之后的其他 switch和filename可以是任意顺序。

含有通配符、空格和其他特殊字符的路径或名称需要使用双引号。
如果你不确定环境变量中是否含有空格个或其他特殊符号,建议总是使用双引号。

例子:
"Dir\Program files\*"
Dir\"Program files"\*
“%programfiles%\iexplorer”

Switch的option可以被组合以缩短命令行的长度。
有些Switch的option还带有自己的参数,因此它必须位于组合的末尾。

7-Zip 可以使用通配符来匹配相似文件。
'*' 代表任意个数的字符序列。
'?' 代表单个字符。

7z使用单个*代表所有文件,使用*.*代表任何有扩展名的文件。
(注意:不是所有文件都有拓展名,目录也可以有扩展名。)

例子:
*.txt  所有扩展名为txt的文件。
???.*  名字为三个字符且有拓展名的文件。
?a*   第二个字符为a的文件。
*1*   名字中含有字符1的文件。
*.*.*  含有双拓展名的文件。

如果命令行中没有使用通配名称或具体文件名,默认的通配符*将被使用。

一个路径末尾的斜杠('\')表示这是一个目录。
如果路径末尾没有斜杠, 这个路径可能是一个目录,也可能是一个文件。

清单文件
你可以为某个 list file (包含文件清单的文件)提供一个或多个具体文件名或通配名称。
list file中的文件名总是被换行符号分割。

对于 list file,7-Zip 默认使用 UTF-8 编码。
你可以使用-scs switch来改变编码。

在list file中可以使用多个list。

例子:
"listfile.txt" 可以包含以下内容:
    My programs\*.cpp
    Src\*.cpp
然后执行命令
    7z a -tzip archive.zip @listfile.txt
将会同时添加My programs和Src目录中的.cpp文件到压缩包。

短文件名
在某些情况下,7z支持短文件名(比如FILENA~1.TXT)。
但是,强烈建议只适用真实文件名(即长文件名)。


1.2退出代码
7-Zip 返回以下退出代码:

代码        含义
0                 没有错误
1                 警告(非严重错误)。比如一个或多个文件被其他程序锁定,它们将不会被压缩。
2                 严重错误。
7                 命令行错误。
8                 操作所需要的内存不足。
255         用户中止了处理过程。
作者: applba    时间: 2011-6-8 14:45

本帖最后由 applba 于 2011-6-8 15:40 编辑

2、命令行的command
command 是命令行中的第一个非switch参数。
Command不区分大小写。


2.1 a (Add) command
添加文件到压缩包。

例子:
7z a archive1.zip subdir\
7z a archive1.zip subdir\*
7z a archive1.zip subdir
上述三种用法都会添加subdir目录中的文件到压缩包内。
同时从subdir开始的所有的路径都会按目录结构被保存。

set "chromedir=%USERPROFILE%\Local Settings\Application Data\Google\Chrome"
7z a "userdata_%date:~,10%_%random%.7z"  "%chromedir%\user data\"
备份指定的目录,并存放到指定的压缩包。

可以使用的switch:
-i (包含文件)
-m (设置算法)
-p (指定密码)
-r (递归子目录)
-sfx (创建SFX)
-si (使用 StdIn)
-so (使用 StdOut)
-ssw (压缩共享文件)
-t (压缩包类型)
-u (更新方式)
-v (设置分卷)
-w (工作目录)
-x (排除文件)


2.2 b (Benchmark) command
测量cpu的速度和检测RAM的错误。

语法:
b [重复次数] [-mmt{N}] [-md{N}] [-mm={Method}]

有两个测试method:LZMA压缩 method 和LZMA解压 method 。

Benchmark体现的是MIPS (million instructions per second)的等级高低。
等级值根据被测试cpu的速度计算出来,而且在多线程选项关闭的Intel Core 2 CPU 上也能得到正确结果。因此,如果你有Intel Core 2 Duo,等级值会和真实的cpu 频率非常接近。

通过-md{N} ,你可以改变字典体积的上限以增加内存使用量。
同样的,通过-mmt{N},你也可以更改要使用的cpu线程数目。

Dict 列 表示字典体积。
例子20表示 2^20 = 1 MB.
Usage 列表示当前工作cpu的时间分配百分比。
结果相对于单线程负荷才是正常的。
例如双线程下的180% cpu使用,是每个线程90%。
R / U 列 表示100%cpu使用时的正常化等级值。
此列显示了一个平均线程的性能。
Avr 列显示了不同字典体积的平均值。
Tot 列显示了压缩和解压分级的平均值。

压缩速度和分级强烈依赖于 RAM latency。
解压速度和分级强烈依赖于CPU integer performance。

你可以运行一个 CRC calculation benchmark,需要通过指定 -mm=crc。
这个测试显示CRC calculation 的速度,以MB/s为单位。
第一列显示 block的大小。
第二列显示单线程的CRC calculation 的速度。
其他列多线程CRC calculation的结果。

例子:
7z b
使用默认值直接运行。

7z b -mmt1 -md26
使用单线程和64M字典。

7z b 30
重复30次。


2.3 d (Delete) command
从压缩包内删除文件。

例子
7z d archive.zip *.bak -r
删除压缩包内所有的哦*.bak,-r 表示递归子目录。

可以使用的switch:
-i (包含文件)
-m (压缩算法)
-p (指定密码)
-r (递归子目录)
-u (更新方式)
-w (工作目录)
-x (排除文件)


2.4 e (Extract) command
从压缩包解压文件到当前目录或指定目录。
需要通过 –o switch 来指定输出目录。

此command 会复制解压后的所有文件到一个目录。
如果要使用完整的路径解压文件,请使用x (Extract with full paths) command。

在要重写一个已经存在的文件时,7-Zip 会提示用户,除非用户指定了-y (Assume Yes on all queries) switch。如果用户回答no,7-Zip 将提示为被解压文件使用新的名字。 然后,如果回答no,将会跳过那个文件(即不解压该文件);如果回答yes,将会使用新的文件名解压。

7-Zip 接受下列回答;
回答                         缩写        动作
Yes                      y
No                      n
Always                   a                Assume YES for ALL 后续的同类询问
Skip                     s                Assume NO for ALL 后续的同类询问
Auto Rename         u                自动重命名
Quit                     q                中止解压过程
缩写和完整形式的回答效果相同。

例子:
7z e archive.zip
所有文件将会被解压到当前目录。
所有文件和目录都被平行存放,并且目录都是空的。

7z e d:\archive.zip -oc:\soft *.cpp -r
解压archive中的所有.cpp文件到指定目录。
如果没有使用使用指定文件的通配名称,会解压所有文件和目录。

可以使用的switch
-ai (包含压缩包)
-an (禁止对archive_name的解析)
-ao (设置重写模式)
-ax (排除压缩包)
-i (包含文件)
-o (设置输出目录)
-p (指定密码)
-r (递归子目录)
-so (使用 StdOut)
-t (压缩包类型)
-x (排除文件)
-y (全部yes)


2.5 l (List contents of archive) command
列出压缩包内的文件的信息。
很简单一个命令。

例子:
7z l archive.zip

支持的switch
-ai (包含压缩包)
-an (禁止解析archive_name)
-ax (排除压缩包)
-i (包含文件)
-slt (显示技术信息)
-p (指定密码)
-r (递归子目录)
-t (压缩包类型)
-x (排除文件)


2.6 t (Test integrity of archive) command
测试指定的压缩包。

例子:
7z t archive.zip *.doc -r
tests *.doc files in archive archive.zip.

支持的switch
-ai (包含压缩包)
-an (禁止解析压缩包名称)
-ax (排除压缩包)
-i (包含文件)
-p (密码)
-r (递归)
-x (排除文件)


2.7 u (Update) command
更新压缩包中的就文件和添加压缩包中没有的文件。
更新固实压缩的7z压缩包可能需要很长时间,因为这需要重新压缩。

例子:
7z u archive.zip *.doc
更新.doc文件到压缩包。

可以使用的switch:
-i (包含文件)
-m (设置算法)
-p (指定密码)
-r (递归子目录)
-sfx (创建 SFX)
-si (使用 StdIn)
-so (使用 StdOut)
-ssw (压缩共享文件)
-t (压缩包类型)
-u (更新方式)
-w (工作目录)
-x (排除文件)


2.8 x (Extract with full paths) command
以完整的路径解压文件到当前目录或指定的目录。
需要通过 –o switch 来指定输出目录。
参见e (Extract) command的描述获得详细信息。

例子:
7z x archive.zip
解压所有文件到当前目录。

7z x archive.zip -oc:\soft *.cpp -r
解压所有.cpp文件到指定目录。

支持的switch
-ai (包含压缩包)
-an (禁止解析archive_name)
-ao (重写模式)
-ax (排除压缩包)
-i (包含文件)
-o (指定输出目录)
-p (指定密码
-r (递归子目录)
-so (使用 StdOut)
-t (压缩包类型)
-x (排除文件)
-y (全部yes)
作者: applba    时间: 2011-6-8 14:45

本帖最后由 applba 于 2011-6-8 14:49 编辑

3、命令行的switch
Syntax
<switch>::= <switch_symbol><switch_characters>[<option>]
<switch_symbol> ::= '/' | '-'

一个switch 由一个switch引导符号(-或/)和其后的名字组成。
有些switch的名字后面还有一个参数 。
Switch的名字不区分大小写,但参数需要区分。

不允许在switch的描述中出现空格或者tab。
Switch 可以用在命令行的任意位置。

3.0 --
--(Stop switches parsing) switch
停止命令行中--后的switch解析。
这允许7-zip可以处理以-开头的文件名。

语法
--

例子
7z t -- -ArchiveName.7z
测试名字为 -ArchiveName.7z 文件。


3.1 -r –i –x
-r (Recurse subdirectories) switch
指定命令行处理通配符和文件名的方式。

Syntax
-r[- | 0]
Switch        Description
-r        启用递归子目录
-r-        禁用递归子目录,所有命令的默认值。
-r0        启用递归子目录,但只对通配符有效。

请注意 如果没有指定通配或具体的文件名称,总是会发生递归。

例子1:使用了通配或者具体的文件名时,一般需要使用递归。
7z l archive.zip *.doc -r-
只列出压缩包根目录下的所有.doc文件,不会列出子目录中的文件。
7z a -tzip archive.zip -r src\*.cpp src\*.h
添加 src目录及其子目录下的所有.cpp文件和.h文件到压缩包。

例子2:没有指定通配或具体的文件名时、不需要主动使用递归。
7z a archive.7z folder1\
添加folder1及其子目录中的所有文件到压缩包,此时不需要递归。
7z x archive.7z –oc:\dir1
解压所有文件到c:\dir1并按目录结构层次存放,此时不需要递归。

例子3:对文件夹也可以使用递归。
7z a archive.7z -r folder2\
递归所有名为folder2 的子目录,并添加到压缩包。
7z x archive.7z –r dir1\
递归所有名字为dir1的目录,然后解压他们到当前目录。

可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), l (List), t (Test), u (Update), x (Extract with full paths)

-i (Include filenames) switch
指定处理过程中额外需要包含的文件。。
支持同时使用多个-i。

Syntax
-i[<recurse_type>]<file_ref>
<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}

Parameters
<recurse_type>
指定通配符和文件名称在这个开关里面怎样被使用。
如果这个选项没有提供,-r (Recurse) switch指定的默认全局值将被使用。
<recurse_type> ::= r[- | 0]
<file_ref>
指定要被处理的文件名称、通配名称或清单文件。
<file_ref> ::= @{listfile} | !{wildcard}

例子:
7z a -tzip src.zip *.txt -ir!DIR1\*.cpp
添加当前目录下的.txt(不递归) 和dir1目录(及其子目录)下所有的.cpp(递归)到压缩包。

可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), l (List), t (Test), u (Update), x (Extract with full paths)

-x (Exclude filenames) switch
指定处理过程中需要排除的文件。
支持同时使用多个-x。

Syntax
-x[<recurse_type>]<file_ref>

<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}

Examples
7z a -tzip archive.zip *.txt -x!temp.*
添加当前目录下的*.txt 文件(不递归)到压缩包, 除了temp.* 文件。
.
可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), l (List), t (Test), u (Update), x (Extract with full paths)

3.2 -ai -ax –an
-ai (Include archive filenames) switch
指定需要额外包含的压缩包。
支持同时使用多个-ai。

Syntax
-ai[<recurse_type>]<file_ref>
<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}

Parameters
参见-r和-i。

例子
7z t -an -air!*.7z
测试当前目录及其子目录下的所有.7z压缩包。

可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), l (List), t (Test), u (Update), x (Extract with full paths)

-ax (Exclude archive filenames) switch
指定需要排除的压缩包文件。
支持同时使用多个-ax

Syntax
-ax[<recurse_type>]<file_ref>
<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}

Parameters
参见-r和-x。

例子:
7z t -an -ai!*.7z -ax!a*.7z
测试当前目录下所有的7z文件(不递归),除了以a开头的7z文件。

可以和此switch一起使用的command
e (Extract), l (List), t (Test), x (Extract with full paths)

-an (Disable parsing of archive_name) switch
禁止命令行解析压缩包名称字段,-an必须和-ai一起使用。
如果你使用-ai来指定一个压缩包的清单,因此你需要禁止对压缩包名称的解析。

Syntax
-an

例子
7z t -an -ai!*.7z -ax!a*.7z
tests all *.7z archives, except a*.7z archives.

可以和此switch一起使用的command
e (Extract), l (List), t (Test), x (Extract with full paths)


3.3 -w -p -t -v
-w (set Working directory) switch
为临时base archive file设定工作目录。
默认地,7-Zip 在旧的base archive file的同目录创建一个新的base archive file 。 通过指定这个switch, 你可以设置临时base archive file 的被创建的目录。临时base archive file 创建完成后,会被复制并替换原始的base archive file,然后被删除。

Syntax
-w[{dir_path}]

{dir_path}
指定目录的路径。路径中的反斜杠不是必须的。
如果<dir_path> 没有被指定, 7-Zip 将使用系统临时目录。

Example
7z a -tzip archive.zip *.cpp -wc:\temp
此命令将在c:\temp创建临时压缩包。

可以和此switch一起使用的command
a (Add), d (Delete), u (Update)

-p (set Password) switch
为压缩包指定密码。

Syntax
-p{password}

{password}
要指定的密码。

Examples
7z a archive.7z -psecret -mhe *.txt
使用密码secret压缩.txt文件到压缩包。
同时文件名也会被加密(-mhe switch)。
7z x archive.zip -psecret
使用密码secret解压文件到当前目录。

可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), t (Test), u (Update), x (Extract with full paths)

-t (set Type of archive) switch
指定压缩包的类型。
一般是在压缩包扩展名和类型不一致的时候才需要使用。

Syntax
-t{archive_type}

{archive_type}
指定类型 可以是: *, 7z, split, zip, gzip, bzip2, tar, ... ,或者他们的组合,如mbr.vhd。
如果 -t{archive_type} switch没有被指定, 7-Zip 使用压缩包的扩展名来来侦测他们的类型。
如果创建一个没有扩展名的压缩包, -t{archive_type} switch 没有被指定, 7-Zip 将创建 .7z格式的压缩包。

当你解压某种类型的压缩包(包含另一没有经过压缩的压缩包,如MBR in VHD),7-Zip 会一步就打开两层。
如果你只想解压顶层,使用 -t* switch。

Note: gzip or bzip2 格式只支持每个压缩包一个文件。
如果你想压缩一个以上的文件到这些格式,先创建一个tar压缩包然后用你选择的格式压缩它。

例子:
7z a -tzip archive.bak *.txt
添加当前目录下的所有.txt文件到压缩包,此压缩包的扩展名为bak。
7z t -t7z.split archive.7z.001
测试archive.7z.001。它还会识别到那是一个多卷的7z压缩包。
7z x -tiso archive.iso
以iso文件格式解压压缩包。
7z x -tudf archive.iso
以udf格式解压压缩包。

可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), l (List), t (Test), u (Update), x (Extract with full paths)

-v (Create Volumes) switch
指定分卷大小。
可以同时使用多个-v。

Syntax
-v{Size}[b | k | m | g]

{Size}[b | k | m | g]
指定分卷大小的单位,字节,千字节,兆字节,G字节
如过你只指定 {Size}, 7-zip 将以字节为单位。
It's possible to specify several -v switches.

NOTE:
在压缩包完成之前,不要使用分卷(和复制分卷)。
7-Zip会在压缩包的操作结束时更新任何分卷(包括第一个分卷)。

例子
7z a a.7z *.txt -v10k -v15k -v2m
创建多卷7z压缩包,第一个分卷,10 KB第二个是15K,第三个是2 MB。

可以和此switch一起使用的command
a (Add)


3.4 –o –ao –y
-o (set Output directory) switch
指定解压时文件的存放的目录。
只能和解压命令(e和x)一起使用。

Syntax
-o{dir_path}

{dir_path}
这是目标目录的路径,末尾的反斜杠不是必须的。
如果在 {dir_path}使用了*, 7-Zip 会替换*为要所包的名称。

例子
7z x archive.zip -oc:\Doc
解压所有文件到 c:\Doc directory.
7z x *.zip -o*
解压所有的zip文件到以他们名字命名的子目录。

可以和此switch一起使用的command
e (Extract), x (Extract with full paths)

-ao (Overwrite mode) switch
指定解压期间的重写模式,怎么处理已经存在的文件。

Syntax
-ao[a | s | t | u ]

Switch        Description
-aoa        不提示就重写所有已经存在的文件。
-aos        跳过解压已经存在的文件。
-aou        自动重命名解压中的文件(例如name.txt 重命名为 name_1.txt).
-aot        自动重命名已经存在的文件(例如name.txt 重命名为 name_1.txt).

Examples
7z x test.zip -aoa
解压文件并没有任何提示就重写已经存在的文件。

可以和此switch一起使用的command
e (Extract), x (Extract with full paths)

-y (assume Yes on all queries) switch
禁止绝大多数7-zip执行期间的普通询问。
你可以使用此-y抑制e (Extract) 和x (Extract with full paths) 的重写询问。

Syntax
-y

Examples
7z x src.zip -y
所有的重写询问都会被抑制,同时磁盘上的所有同名文件会被重写。

可以和此switch一起使用的command
e (Extract), x (Extract with full paths)


3.5 –scc –scs –si -so
-scc (Set charset for console input/output) switch
为控制台输入输出指定编码字符集。

Syntax
-scc{UTF-8 | WIN | DOS}
默认的字符集是DOS。

UTF-8
Unicode UTF-8 character set.
WIN
Default character set of Windows.
DOS
DOS (OEM) character set of Windows.

例子
7z l archive.7z -sccUTF-8
以UTF-8编码字符集显示压缩包内的文件。

-scs (Set charset for list files) switch
为清单文件指定编码字符集。

Syntax
-scs{UTF-8 | WIN | DOS}
默认的字符集是UTF-8

UTF-8
Unicode UTF-8 character set.
WIN
Default character set of Windows.
DOS
Default DOS (OEM) character set of Windows.

Example
7z a archive.7z @listfile.txt -scsWIN
指定清单文件的编码字符集为win。

可以和此switch一起使用的command
a (Add), u (Update)

-si (read data from stdin) switch
使7-Zip从stdin (standard input)读取数据,而不是从磁盘文件。

Syntax
-si{file_name}

{file_name}
指定压缩包内 被压缩数据存放的文件名。
如果不指定文件名,压缩的数据将会被存储,但没有名字。I

Note:
当前版本的7-zip支持从stdin进行压缩包的读取, 但是只支持 xz, lzma, tar, gzip and bzip2 压缩包。

例子:
7z a archive.gz -tgzip -siDoc2.txt < Doc.txt
压缩来自doc.txt的输入流,压缩后的数据流存放在Doc2.txt。
7z x 7z905.tar.gz -so | 7z x -si -ttar
压缩7z905.tar.gz文件到tar格式。

可以和此switch一起使用的command
a (Add), e (Extract), u (Update), x (Extract with full paths)

-so (write data to stdout) switch
使7-Zip 把输出数据写到stdout (standard output stream).

Syntax
-so

例子:
7z x archive.gz -so > Doc.txt
解压压缩包到标准输出,同时标准输出又被重定向到Doc.txt文件。
7z a dummy -tgzip -so Doc.txt > archive.gz
压缩 Doc.txt到标准输出,随后又被重定向到archive.gz文件。

可以和此switch一起使用的command
a (Add), e (Extract), u (Update), x (Extract with full paths)


3.6 –slp –slt –ssc
-slp (Set Large Pages mode) switch
设置 Large Pages 模式。

Syntax
-slp[-]

Switch        Description
-slp        启用 Large Pages 模式。
-slp-        禁用 Large Pages 模式,这是所用命令的默认值。

Large Pages 模式能提高压缩速度。 但是,在开始压缩的时候会有一个暂停,此时 7-Zip 在内存中分配large pages。 如果7-Zip 无法分配 large pages,它将分配普通的 small pages。同时, 如果7-zip使用large pages ,Windows 任务管理并不显示该程序的真实内存使用。这一特征只在 Windows 2003 / XP x64上有效。 另外它还需要当前系统的管理员权限。这一特征的推荐内存大小是1G或者以上。要安装此特征,你必须运行7-Zip 文件管理器最少一次,关闭后重启系统。
如果你使用-slp 模式,在压缩开始时你的系统可能会挂起几秒钟。
因此,不推荐使用-slp模式处理较小的数据集(小于100MB)。

例子
7z a archive.7z -slp a.iso
使用Large Pages模式压缩a.iso。

-slt  (Show technical information) switch
为l (List) command设置专业模式

Syntax
-slt

Example
7z l -slt archive.7z
显示压缩包内文件的详细技术信息。

可以和此switch一起使用的command
l (List)

-ssc (Set Sensitive Case mode) switch
为文件名称设置大小写敏感模式。

Syntax
-scs[-]

Switch        Description
-ssc        设置大小写敏感模式,Posix/Linux系统的默认值。
-ssc-        设置大小写不敏感模式,windows系统的默认值。.
例子:
7z a archive.7z A*.txt -ssc -r
压缩所有A开头的文件,但是不会压缩a*.txt。

可以和此switch一起使用的command
a (Add), d (Delete), e (Extract), l (List), t (Test), u (Update), x (Extract with full paths)

-ssw (Compress files open for writing) switch
压缩被其他程序打开的文件。
如果这个switch 没有设置,7-zip 不会包含这个文件到压缩包。

Syntax
-ssw

例子
7z a archive.7z -ssw *.txt
压缩当前目录下的所有*.txt文件,包括被其他程序打开的。

可以和此switch一起使用的command
a (Add), u (Update)
作者: applba    时间: 2011-6-8 14:45

本帖最后由 applba 于 2011-6-8 14:51 编辑

3.7 –u
-u (Update options) switch
指定怎么更新压缩包内的文件,或者怎么创建新的压缩包。

Syntax
-u[-]<action_set>[!{new_archive_name}]
  <action_set> ::= <state_action>...
    <state_action> ::= <state><action>
      <state> ::= p | q | r | x | y | z | w
      <action> ::= 0 | 1 | 2 | 3

Parameters
dash (-)
禁止base archive中的任何更新
base archive是指命令行中"base_archive_name" 指定的压缩包。
{new_archive_name}
指定要创建的新压缩包的路径和名称。
这个switch的所有 options 都是对这个新压缩包而言的。
如果没有指定,所有的options 都是针对base archive而言的。
<state>
指定待处理的特定文件的状态。
取值范围是:p | q | r | x | y | z | w
<state>        State condition        磁盘文件        压缩包文件
p        文件存在于压缩包中,但是不匹配通配名称。                 存在,但是不匹配
q        文件存在于压缩包,但是磁盘上没有对应文件。        不存在        存在
r        文件存在与磁盘,但是压缩包中么有对应文件。        存在         不存在
x        压缩包中的文件比磁盘上的文件新。        旧的        新的
y        磁盘上的文件比压缩包中的文件新。        新的        旧的
z        压缩包和磁盘上的文件相同。        相同        相同
w        无法判断哪个文件较新。时间日期相同,体积不同。        ?        ?
<action>
为给定 <state>指定<action>。
取值范围是:0 | 1 | 2 | 3
<action>        Description
0                忽略文件,不在新压缩包中创建该文件的条目。
1                复制文件,从旧压缩包复制文件到新压缩包
2                压缩文件,从磁盘压缩文件到新要所报。
3         创建反项目,即解压时要删除的文件或目录。 仅7z格式支持。

注意
任何更新压缩包的command(比如 a(Add), d (Delete), u (Update))都可以使用这些参数。

下面的表单列出了这些命令可以使用的<action_set>
command \ <state>        p        q        r        x        y        z        w
d (Delete)        1        0        0        0        0        0        0
a (Add)        1        1        2        2        2        2        2
u (Update)        1        1        2        1        2        1        2
Freshen        1        1        0        1        2        1        2
Synchronize        1        0        2        1        2        1        2

如果你不指定{new_archive_name},所有的选项都会作用于主压缩包(7z命令后第一个压缩包,即"base_archive_name"指定的压缩包)。如果你指定了{new_archive_name} ,7-Zip also 将会创立一个新的压缩包,所有的选项将作用于新压缩包。

支持多个-u switch。
7-Zip在一次操作过程中可以创建任意数量的新压缩包。

默认地,每个新压缩包的 action set组合 被指给了不同的 command。 有三个不同的action set 组合指给了这些命令: a (Add), d (Delete), u (Update),你可以为这些命令重新指定任何<state_action> 对。

注意时区
如果你改变了你的时区,在使用更新压缩包的command (a,d,u) 时,你可能会遇到一些问题,因为有些更新时取决于文件的修改时间的。强烈建议你只使用UTC文件文件系统和UTC压缩包格式。 那样你就不会遇到时区改变的相关问题了。也建议在其他情况下只使用UTC格式 比如你发送压缩包给其它时区的人。

另外在某些情况下不会出现问题,如果文件系统和压缩包格式都使用本地时间。比如,FAT文件系统和ZIP格式。
•        UTC 文件系统: NTFS
•        UTC 压缩包格式: .zip with -mtc switch, 7z, tar, gzip2, iso, wim
•        本地时间文件系统 : FAT, FAT32
•        本地时间压缩包格式: rar, zip, cab
•       
例子:
7z u c:\1\exist.7z -u- -up0q3x2z0!c:\1\update.7z *
创建新压缩包 update.7z,当前目录下所有与压缩包exist.7z 中不同的文件被包含到新压缩包。旧压缩包不会被改变。

7z u c:\1\exist.7z -up0q3x2z0!c:\1\update.7z * -ms=off
创建新压缩包 update.7z,当前目录下所有与压缩包exist.7z 中不同的文件被包含到新压缩包。

注意:更新固实的.7z压缩包可能比较慢,因为它需要重新压缩。

可以和此switch一起使用的command
a (Add), d (Delete), u (Update),


3.8 –m
-m (Set compression Method) switch
指定压缩算法。

Syntax
-m<method_parameters>

switch的个数取决于压缩包的类型。
•        Zip
•        GZip
•        BZip2
•        7z
•        XZ


算法很复杂,内容很多,未完待续……………………
作者: dennisle    时间: 2011-6-8 14:58

感謝樓主分享,
已將它收下了!!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2