【问题标题】:7-zip commandline7-zip 命令行
【发布时间】:2018-04-12 19:39:07
【问题描述】:

我正在创建一个备份实用程序,用于压缩文本文件中列出的所有文件。我使用 MS ACCESS 作为前端,使用 7-Zip 进行压缩。这些是我正在使用的命令:

7zG.exe a c:\Backup\backup.zip
@c:\temp\tmpFileList.txt

所有文件都在没有路径的情况下被压缩。有没有办法在 zip 文件中包含每个文件的路径?然后在提取backup.zip 时,文件将恢复到其原始文件夹结构。

谢谢

【问题讨论】:

  • 如果您设法将路径合并到 zip 文件中,请使用相对路径,否则除了原始位置之外,您将无法在其他任何地方恢复它们。
  • “我们怎样才能使我们的工具尽可能钝化以在命令行中使用...?嗯...哦,我知道!像这样!”

标签: command-line 7zip


【解决方案1】:

this 7-zip forum thread 中,许多人表达了他们对这个功能的渴望,7-zip 的开发人员 Igor 指向标题为“如何在存档中存储文件的完整路径?”的FAQ question。达到类似的结果。

简而言之:

  • 按卷分隔文件(C:\ 上的文件一个列表,D:\ 上的一个列表等)
  • 然后对于每个卷的文件列表,
    1. chdir 到相应卷的根目录(例如,cd /d C:\
    2. 创建一个文件列表,其路径相对到卷的根目录(例如,C:\Foo\Bar 变为 Foo\Bar
    3. 使用这个新文件列表像以前一样执行7z a archive.7z @filelist
    4. 使用完整路径解压时,请务必先 chdir 到相应卷的根目录

【讨论】:

    【解决方案2】:

    7-Zip 的命令行程序是 7z 或 7za。这是可用选项的helpful post。 -r(递归)选项存储路径。

    【讨论】:

    • 感谢 Vinay 的回复。但我在我的 7-zip 目录中找不到 7za.exe,7z.exe 也有 0 个字节。我使用了 7zG.exe,因为它显示的是 GUI 进度条而不是 DOS 屏幕。唯一的问题是它不包含文件所在的路径
    【解决方案3】:

    我没有对此进行过调查,但从臀部射击我会说他们在便携式设备中放弃了命令行支持。人们在便携式应用程序中没有做太多命令行操作的原因是操作系统(在您的情况下是 Windows)要求将可执行文件添加到 %path% 包含列表中。

    如果不满足该要求,使用命令行实用程序是相当乏味的。

    7z -a .

    应该是

    d:\portable\z7\z7 -a c:\to\archive\folder*.*

    将所有内容都输入,这就是为什么 GUI 对便携式应用程序之类的东西有意义,它(应用程序)可以记住它自己的位置并为你处理这些东西,如果你不能运行它,你就知道它没有连接。

    如果您确实希望便携式应用程序包含它,但您始终可以安装完整版本并将所需的 7z.exe 拉出并将其放入便携式文件夹中,确保它包含所需的 dll。

    在确保已连接外壳后,您必须在敲击外壳时设置路径。

    http://www.redfernplace.com/software-projects/patheditor/ -- 一个好的路径编辑器(向下),如果你有很多路径信息,20+ 很难阅读。

    http://www.softpedia.com/get/System/System-Miscellaneous/Path-Editor.shtml -- 路径编辑器的备用网源

    不建议修改临时“便携式”驱动器的系统路径,尽管手动这样做:

    设置路径=%path%;"d:\portable\z7\";

    当你运行 dos cmd.exe 或http://sourceforge.net/p/conemu/home/Home/

    其他答案更好地解决了其他问题我不打算尝试..

    http://www.codejacked.com/zip-up-files-from-the-command-line/ -- z7 和 z7a 命令行使用的良好参考。

    PS:对于死灵很抱歉,但我认为它需要一个更直接的答案来说明原因(即使它只是推测性的)。

    【讨论】:

      【解决方案4】:

      试试这个。它对我有用。 7z.exe a d:\newFileName.7z "d:\ExistingFile.txt"

      打开 cmd,如果你已经安装了 7zip 应用程序,那么试试这个。 在命令提示符下,它会像 c:\programs and files\7zip\7z.exe a d:\newFileName.7z "d:\ExistingFile.txt"

      【讨论】:

        【解决方案5】:

        从 7-zip 版本 9.25 alpha 开始,有一个新的 -spf 开关可用于存储完整的文件路径,包括存档的驱动器号。

        7zG.exe a -spf c:\BAckup\backup.zip @c:\temp\tmpFileList.txt
        

        现在应该可以正常工作了。

        【讨论】:

          【解决方案6】:

          7-Zip 需要列表文件中的相对路径,否则它将只存储文件名,导致重复文件名错误。

          假设您的列表包含完整路径名:

          • 编辑列表文件以删除驱动器前缀 C:\
          • 确保您在运行 7Z 以使用上述列表文件时位于驱动器的根目录中。
          • 然后它将存储路径并且不会抱怨重复名称。它需要列表文件中的相对路径。

          如果您的列表文件具有相对于另一个文件夹的路径,则您应该从该文件夹运行 7Z。

          更新:我从上面的另一篇文章中注意到,新的 7-Zip 有一个不需要上述步骤的 -spf 选项。尚未对其进行测试,但我的步骤适用于没有此选项的早期版本。

          【讨论】:

            【解决方案7】:

            而不是选项a 使用选项x,这将创建目录但仅用于提取,而不是压缩。

            【讨论】:

            • 不相关; OP 询问有关在压缩文件中存储路径的问题,而不是在解压缩文件中。
            猜你喜欢
            • 1970-01-01
            • 2011-04-16
            • 2012-06-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-16
            • 1970-01-01
            相关资源
            最近更新 更多