最近在自动化的过程中用到了7z命令行工具,发现其参数中的路径挺有意思的,在此总结一下。本文中所有demo使用的7z版本为:15.14 x64。

压缩某个文件夹

下面的命令会把g:\temp\目录和目录下的所有文件打包到压缩文件abc.zip中。

7z.exe a abc.zip g:\temp\

注意,此时压缩包中是包含temp目录的。

当我们解压缩abc.zip文件时就会发生一件比较有趣的事。无论通过右键菜单中windows提供的”Extract All…”还是7z提供的”Extract files…”,默认都会给解压缩的文件添加一级目录即abc。

多出的这级目录可能是我们想要的,可能不是。如果不是,我们可以在上面的UI界面中把它去掉。

或者你可以使用命令行解压它:

7z.exe x abc.zip –og:\

你能相信吗,解压出来的文件路径中并没有abc这级目录!

压缩某个文件夹下的所有文件

由于通过UI解压缩时默认会生成一级以压缩文件名命名的目录,为了在解压后不改变目录树的结构。我们可以考虑在压缩时,只添加根目录下的所有文件而不添加根目录,然后以根目录的名称命名压缩文件。

7z.exe a g:\temp.zip g:\temp\*

此时,压缩包中将不包含temp目录。

这样,我们通过UI默认解压出来的文件路径和压缩前是一致的。

但是,如果使用命令行解压就得手动添加上一级目录:

7z.exe x g:\temp.zip –og:\temp

接下来让人意想不到的事情再次发生了,当我们使用相对目录执行压缩命令时:

G:\> 7z.exe a g:\temp.zip temp\*

压缩包中仍然出现了temp目录。查询7z的文档后才知道,在这种情况下,要使用相对路径,需要这样写:

G:\> 7z.exe a g:\temp.zip .\temp\*

在压缩包中包含压缩目录的父目录

还有一种情况,就是我们在压缩一个目录时,希望把它的父目录信息也保存到压缩包里。注意,压缩包里只有父目录而不包含父目录中的其他文件。这时就必须使用相对目录了:

G:\>7z.exe a g:\temp.zip temp\test\

这样,压缩包中文件的根目录就是temp了。

文件列表

当执行压缩命令时,除了指定目录外还可以指定一个或者多个文件。如果要指定多个文件/目录,最好的方法是把这些文件/目录的名称写到一个文本文件中,然后把这个文本文件作为命令行参数。这个文本文件就称为文件列表,在参数中引用它时需要在文件名前面添加一个特殊的符号’@’。

G:\>7z.exe a g:\abc.zip –i@g:\list.txt 

-i表示list.txt中罗列的文件和目录会被添加到压缩包中。

文件列表中可以写文件的绝对路径,也可以写相对路径。需要注意的是,如果写相对路径,是相对于当前工作目录的路径,而不是相对于list.txt的路径。

文件列表中既可以罗列单个文件的路径,也可以罗列目录的路径。注意区分相对路径和绝对路径,其规则和前文所述相同。

除了包含指定的目录/文件,还可以排除指定的目录/文件。

G:\>7z.exe a g:\temp.zip g:\temp\ -x@g:\temp\list.txt

-x表示list.txt文件中列出的文件和目录不会添加的压缩包中。

注意:排除列表中只能使用相对目录。

7z命令行参数中的路径的更多相关文章

  1. python中os.path.dirname(__file__) 命令行 参数没有绝对路径导致数据库找不到

    (1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:/python ...

  2. .NET 命令行参数包含应用程序路径吗?

    如果你关注过命令行参数,也许发现有时你会在命令行参数的第一个参数中中看到应用程序的路径,有时又不会.那么什么情况下有路径呢? 其实是否有路径只是取决于获取命令行参数的时候用的是什么方法.而这是 Win ...

  3. C++ main函数命令行参数使用

    1. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv ...

  4. shell 命令行参数(基本)

    命令行参数 $0 表示程序名.$1 至 \$9则是位置参数.$# 表示参数的个数.$* 将所有参数当做一个整体来引用$@ 把每个参数作为一个字符串返回,可以使用for循环来遍历$? 最近一个执行的命令 ...

  5. Python 的命令行参数处理 optparse->argparse

    optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代. 但是用习惯了optparse,还是很好用的撒. optparse使用起来,相比旧 ...

  6. 【转】getopt分析命令行参数

    (一) 在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如: ./a.out -a1234 -b432 -c -d 程序会根据读取的参数执行相应的操作,在C语言中,这个 ...

  7. C# 调试程序时如何输入命令行参数

    调试程序时如何输入命令行参数http://www.a769.com/archives/320.html 开发命令行程序时,我们会疑惑,从那里输入参数呢?请看下面的教程,让你摆脱困扰. 1.点击菜单栏: ...

  8. 使用FindCmdLineSwitch处理命令行参数

    一.四个形式(变体) .function FindCmdLineSwitch(const Switch: string; const Chars: TSysCharSet; IgnoreCase: B ...

  9. getopt、getopt_long和getopt_long_only解析命令行参数

    一:posix约定: 下面是POSIX标准中关于程序名.参数的约定: 程序名不宜少于2个字符且不多于9个字符: 程序名应只包含小写字母和阿拉伯数字: 选项名应该是单字符或单数字,且以短横 '-' 为前 ...

随机推荐

  1. 【Win10】UAP/UWP/通用 开发之 RelativePanel

    [Some information relates to pre-released product which may be substantially modified before it's co ...

  2. 【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一.为什么需要自定义锁屏页 锁屏 ...

  3. 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel

    5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...

  4. Silverlight中文本框添加回车事件后,换行无法清除的解决方法

    在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究, ...

  5. [ZigBee] 10、ZigBee之睡眠定时器

    0.概述 睡眠定时器用于设置系统进入和退出低功耗睡眠模式之间的周期.睡眠定时器还用于当进入低功耗睡眠模式时,维持定时器2 的定时. 睡眠定时器的主要功能如下: ● 24 位的定时器正计数器,运行在32 ...

  6. 《OOC》笔记(4)——自动化地将C#代码转化为C代码(结构版)

    <OOC>笔记(4)——自动化地将C#代码转化为C代码(结构版) 我在<C表达面向对象语言的机制——C#版>中已经说明了从C#到C的转换方法.这次看<OOC>也是想 ...

  7. redis系列-redis的连接

    Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品.它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list ...

  8. 微信授权步骤与详解 -- c#篇

    微信授权步骤与详解 -- c#篇 注:这里不涉及界面操作,只介绍代码操作. 1.基本原理如下: 从图上所知,第一步用户访问我们的网页,第二步我们后台跳转到微信授权页面,第三步用户点击授权,第四步微信重 ...

  9. java 锁3

    先谈线程的状态: 具体来说有, NEW. Running. Blocked.此状态的线程阻塞,它正在等待监视器锁——等待另外一个线程释放锁(通俗说就是等它执行完synchronized了的方法/代码块 ...

  10. 移动 Web 触摸与运动解决方案 AlloyTouch 开源啦

    传送门 Github地址:https://github.com/AlloyTeam/AlloyTouch 简介 AlloyTouch的本质是运动一个数字,把数字的物理变化映射到你想映射的任何属性上.所 ...