如何使7-zip做一堆文件夹


18

我收到了一堆必须裁剪为800x600像素的图片。这很容易做到,但是现在我必须上传它们,以便全家人都能看到它们。

事情是,这是500MB的图片。我决定简单地压缩单独的文件夹,每个文件夹包含几乎相等数量的图片。这样,我每天可以上传几个。手动执行此操作是一项非常漫长而艰巨的工作。我想知道是否有一种方法可以使每个文件夹分别使用7-zip处理吗?

我认为我需要一个批处理文件来完成此操作,但是我对此并不满意。我把所有东西都放在一个文件夹下。图片位于各个子文件夹中。我需要压缩该文件夹的内容。我不确定是否可以将文件夹一起压缩。我知道PHP有一个zip模块,但我从来没有使用过它,因此我不确定它是否可以处理zip内容是一个包含项目而不是仅项目的文件夹这一事实。


1
您正在谈论几个文件夹?7?147?如果您对批处理文件不满意,那么也许这是应对该挑战的好机会。:)
JMD 2010年

总共105个文件夹
KdgDev 2010年

Answers:


25

从命令提示符下运行,该命令的工作目录是您的My Pictures目录,此命令将创建每个子目录内容的zip文件,并将所有zip文件保留在My Pictures目录中。

编辑:我已经添加了必要的引号,以允许名称中包含空格的目录。

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" "%%d"

另外:以下版本不会将文件放在zip文件内部的子目录中,而是放在其根目录中:

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" ".\%%d\*"

在Windows 7及更高版本中

for /D %d in (*.*) do 7z a -tzip "%d.zip" "%d"

要么

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"

我尝试将7-zip文件夹添加到我的类路径中,但是它不起作用。如果我使用整个字符串而不是7z来定位可执行文件,它确实可以工作。我虽然将该字符串添加到类路径中应该具有相同的效果?
KdgDev 2010年

classpath是Java在其中寻找类和库。 google.com/search?q=classpath 您似乎已经将其与pathshell查找可执行文件的位置混淆了。
eleven81 '01

问题:该脚本有效,但是文件夹名称中没有空格时...
KdgDev 2010年

感谢更新。使用第二个脚本,您是说zip的内容将被“压缩”吗?
KdgDev 2010年

6
这为我工作不错,但我不得不改变%%d%d我的Win 7的盒子抱怨变数名称太长扔“%% d在这个时候意外”的错误。
杰姆2011年

7

我无法使命令行正常工作,而是下载了WinRAR和 mtone是正确的-WinRAR确实具有将多个文件夹压缩到各自独立的ZIP文件中的选项。

例如C:\Files\Fables 01进入C:\Files\Fables 01.zipC:\Files\Fables 02进入C:\Files\Fables 02.zip

使用WinRAR,打开包含要压缩的文件夹的文件夹,然后按照以下步骤操作:

  • 选择您要压缩/打包的所有文件夹
  • 点击“添加”或Alt+A或命令->“将文件添加到存档”
  • 选择RAR或ZIP
  • 转到“文件”标签
  • 选中“存档”框下的“将每个文件放入单独的存档”

当您完成其他设置后,请按一下确定,然后开始:多个文件夹的多个ZIP文件。这比命令行7zip容易得多。


即使显示“每个文件”,此复选框也适用于文件夹。
dhaupin '16

1
在这里提出的所有解决方案中,这个对我来说最适合2018年。只需确保您要存档存档为.zip,否则它将生成一堆.rar文件。
Eric Hepperle-CodeSlayer2010 '18

5

略微更新了eleven81的答案:下面的代码创建了一个批处理文件,可以将多个项目放到其中。

@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop

然后可以通过注册表将该批处理文件添加到上下文菜单中:

  1. 在[HKEY_CLASSES_ROOT \ Folder \ shell]下创建一个新密钥,将其命名为cmd1
  2. 编辑字符串值并将其称为“批处理邮政编码”
  3. 在此密钥下创建另一个新密钥并调用命令
  4. 使用双转义斜杠将this的值更改为您的路径

因此,例如,我的输入是“ C:\ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat”“%1”

完成此操作后,您将在上下文菜单中找到“批量压缩”条目,该条目会将所有选定的文件夹批量压缩到单独的档案中

但是,如果通过上下文菜单执行此操作,那么不幸的是它将同时运行所有操作,并且正如做过很多压缩和解压缩工作的任何人都知道的那样,压缩文件夹的工作速度比一次完成要快得多。

如果有人知道在注册表中解决此问题的方法,请告知。

将选定的文件夹拖到批处理上将一个接一个地进行。


1
7z exe不在我的路上,因此我不得不稍微编辑一下脚本。“ C:\ Program Files(x86)\ 7-Zip \ 7z.exe” -tzip“%〜1.zip”“%〜1”
Ryan

1
+1可通过拖放大声笑鼓励懒惰。我刚刚发布了修改后的版本@ http://superuser.com/a/1160047/678687
Enteleform '16

3

提示:如果您的图像是JPG,则它们已经被压缩。在没有压缩的情况下(压缩级别:存储)在“存档”模式下使用7-Zip,这将大大加快该过程。

即使您使用Ultra压缩,也几乎不会获得5%的收益,这当然不值得。

我在考虑实际上添加附件的方面。

我不会将它们作为电子邮件附件发送。而是将其上传到所谓的一键式托管服务器(例如drop.io,rs,mu,ms等,选择很多),然后通过电子邮件将下载链接发送给您的朋友和家人。


2
不过,它们将更易于邮寄。
Rook

我认为上传475 MB或500 MB并没有太大区别,当然不足以弥补用'Ultra'压缩大量JPG的时间:)

我在考虑实际上添加附件的方面。添加一个文件作为附件而不是添加10个文件更容易(当文件数量增加时,这很烦人)。
Rook” 2010年

这就是为什么莫莉建议使用“存档”模式的原因;它将它们全部塞入一个文件中,而不会浪费时间尝试压缩已压缩的内容……
Adrien 2010年

没错,我确实屈服于她的最后一句话,但尽管如此,即使jpeg文件的大小略有减少(实际上有时并不那么小),还是值得的。用于压缩的时间远远少于将其用于上传gmail或其他邮件(gmail的附件大小允许量较大)的时间。
Rook” 2010年

2

我发现roryok的答案是非常有益的,他提供了一个batch scriptWindows,让您drag-&-drop快速,自动存档文件。


要使用此脚本,只需将其保存为.bat扩展名,然后就可以将文件和/或文件夹拖放到批处理文件(批处理文件的快捷方式)上。

.zip文件将在与源文件相同的目录中创建。
尽管可以在脚本@中更改目标archivePath


我进行了一些更新,以简化自定义和整体功能:

  • 添加命名变量
  • 实现了一个for循环,循环访问给定的参数
    以及delayedexpansion允许运行时变量
  • 增加if了区分条件filesfolders
    • 这允许将文件夹内容直接添加到存档中,而不是将父文件夹包含在存档中
      例如:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt
  • 添加了错误日志以显示失败的实例,或者如果没有错误则显示成功消息

@Echo OFF
SetLocal EnableDelayedExpansion



Rem //  7-Zip Executable Path
Set sevenZip="C:\Program Files\7-Zip\7z.exe"



Rem // START: NewLine Variable Hack
Set newLine=^


Rem // END: NewLine Variable Hack !! DO NOT DELETE 2 EMPTY LINES ABOVE !!



Rem //  Set ErrorLog Variables
Set errorCount=0
Set separator=--------------------------------------------------------
Set errorLog=!newLine!!newLine!!separator!!newLine!!newLine!
Set errorPrefix=ERROR @:
Set successMessage=All Files Were Successfully Archived



Rem //  Loop Through Each Argument
SetLocal DisableDelayedExpansion
for %%x in (%*) do (

    Rem //  Use Current Argument To set File, Folder, & Archive Paths
    SetLocal DisableDelayedExpansion
    Set filePath="%%~x"
    Set directoryFiles="%%~x\*"
    Set archivePath="%%~x.zip"
    SetLocal EnableDelayedExpansion

    Rem //  Source Is A Folder
    if exist !directoryFiles! (
            Set sourcePath=!directoryFiles!
    )

    Rem //  Source Is A File
    if not exist !directoryFiles! (
            Set sourcePath=!filePath!
    )

    Rem //  Print Separator To Divide 7-Zip Output
    echo !newLine!!newLine!!separator!!newLine!!newLine!

    Rem //  Add Files To Zip Archive
    !sevenZip! A -TZIP !archivePath! !sourcePath!

    Rem //  Log Errors
    if ErrorLevel 1 (
        Set /A errorCount=errorCount+1
        Set errorLog=!errorLog!!newLine!!errorPrefix!!sourcePath!
    )
)



Rem //  Print ErrorLog
if !errorCount!==0 (
    Set errorLog=!errorLog!!newLine!!successMessage!
)
Echo !errorLog!!newLine!!newLine!!newLine!



Rem //  Keep Window Open To View ErrorLog
pause

1

7-zip具有将每个文件解压缩到其自己的文件夹(* /)中的选项,但是缺少上下文命令来执行您要查找的相反操作。

就是说,我记得过去曾经使用winrar来做这件事。有一个选项“每个文件夹唯一的存档”或类似的东西。


-1

获取picasa并上传到picasa的网络相册。这样,每个人都可以轻松地在线获取照片并查看它们。甚至可以上传原始照片(以便您的家人可以打印较大的照片)


如果您认为人们会对下载和解压缩zip文件感到满意,那么我想您会感到失望... Web界面对涉及的每个人都更加容易
。...– Kurru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.