如何使用命令行压缩特定文件夹

时间:2009-09-11 16:46:49

标签: .net windows command-line backup zip

你能告诉我如何将指定的文件压缩到同一个Zip文件中吗?让我告诉我的文件夹是如何填充的:

  • 任务计划程序备份我的数据库并每天将它们保存到文件中。它每天创建4个数据库备份,这意味着每天将有4个文件。所以我需要将新创建的备份压缩到相同的zip文件中(当然它与前一天的zip文件不同,zip文件将在当天为新创建的备份文件创建),我需要自动完成。我知道如何使它自动化。我可以使用Windows任务调度程序来自动化。

感谢。

5 个答案:

答案 0 :(得分:11)

我使用开源程序7Zip和命令行,如:

"C:\Program Files\7-Zip\7z.exe" a My.zip MyFileOrFolder

如果您正在使用NTFS分区,它还可以解决您的问题,让Windows自动压缩备份文件所在的文件夹(右键单击您的文件夹,选择“属性”,“高级”,然后单击“压缩内容以保护数据”)

答案 1 :(得分:5)

你可以使用DotNetZip来实现它 - 它最初是作为一个供程序员使用的库而生成的,但是在库中构建和随附的示例应用程序本身就变得非常有用。

其中一个“样本”称为zipit.exe - 一种控制台工具。指定不存在的zipfile以创建新的zipfile,或指定现有的zipfile来更新它。

zipit.exe ZipArchive.zip  c:\data\folder1

您可以指定一个或多个文件名,目录或描述要包含哪些文件的逻辑表达式。表达式:

  • name = *.jpg
    任何.jpg文件。

  • mtime > 07/01/2009
    2009年7月1日午夜之后具有上次修改时间的任何文件。还有创建时间和访问时间的ctime和atime。

  • ctime > 07/01/2009:07:53:00
    2009年7月1日上午7:53之后创建时间的任何文件。

  • size > 320mb
    任何大小超过320mb的文件。您也可以使用 kb gb 。或者省略字节大小的字符。你可以使用<或=作为操作。

  • attr != H
    任何没有Hidden属性集的文件。其他属性包括S = system,R = Readonly,A = Archive。当然,您也可以测试该属性是否为ON(使用=而不是!=)。

  • attr != H and size > 320mb
    包括满足这两个条件的文件。您也可以使用OR作为结合。使用parens对复杂表达式进行分组。

  • name = *.jpg or name = *.gif
    包括满足一个或另一个条件的文件。

  • (name = *.jpg) or (name = *.gif)
    与上述相同。

  • (mtime >= 07/01/2009) and (mtime < 07/02/2009)
    7月1日修改的任何文件。从午夜到午夜。

  • (name = *.jpg) AND (mtime >= 07/01/2009) and (mtime < 07/02/2009)
    7月1日修改的任何.jpg文件。

  • (name = *.jpg) and (size >= 100kb) and (mtime >= 07/01/2009) and (mtime < 07/02/2009)
    任何.jpg文件,大小为100kb或以上,于7月1日修改。

使用zipit.exe工具上的其他选项,您还可以:

  • 指定是否要遍历重新分析点(例如符号链接或交汇点,例如“我的音乐”)。
  • 是否递归目录(默认为NOT)
  • 使用AES或“常规”zip加密
  • 加密zip
  • 指定段大小以生成跨区或分段的zip文件。
  • 制作自解压档案

示例:

zipit.exe Archive.zip -D c:\project1 -r+ "(name = *.xlsx) and (mtime >= 07/01/2009) and (mtime < 07/31/2009)"

  • 生成一个文件Archive.zip,该文件包含在7月修改的c:\ project1目录层次结构中的所有.xslx文件。

zipit.exe Unpack.exe -sfx w -D project2 -r+ "(name = *.pdf) and (size > 100kb)"

  • 生成一个名为Unpack.exe的自解压GUI exe,其中包含project2目录层次结构中大小超过100k的所有.pdf文件。

DotNetZip是免费的。

所有这些功能也可以在库的.NET界面中使用。还有一个GUI工具。

答案 2 :(得分:3)

我放弃了WinZip,转而使用7-Zip,因为它快速,免费,高效,适用于Windows和Linux。

如果您是WinZip粉丝,请查看WinZip命令行支持插件:http://winzip.com/prodpagecl.htm

您可以存档Windows命令行允许的任意数量的文件或目录:

wzzip archive.zip dir1 dir2 dir3 ...

答案 3 :(得分:2)

您可以在http://gnuwin32.sourceforge.net/packages/zip.htm下载适用于Windows的GNU zip。如果您想获得整个UNIX命令行路由,请使用http://www.cygwin.com/

手册页给出了这个似乎可以解决您的问题的示例,还有许多其他命令行选项:

例如,如果foo.zip存在且包含foo / file1和    foo / file2,目录foo包含文件foo / file1和foo / file3,然后:

      zip -r foo.zip foo

或更简洁

      zip -r foo foo

将替换foo.zip中的foo / file1并将foo / file3添加到foo.zip。在这之后,    foo.zip包含foo / file1,foo / file2和foo / file3,其中foo / file2不变    之前。

答案 4 :(得分:1)

查看一个名为PKZIP的旧程序。我相信你也可以用WinZip和7Zip来做到这一点。