琪依坤 | 羽毛在飛

Good Luck To You!

批量压缩文件夹

快速应用:

前提条件为已安装7-Zip软件。复制下面这行到文本文件,将文件扩展名改为.bat,将.bat文件复制到相应目录,双击执行即可。

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X" 

========================================================

B站视频:https://www.bilibili.com/video/BV1oQ4y1v7je

前几个月,阿里云盘上线,我凑热闹在上面下载了一些电子书,其中有一些电子书同时提供了多种格式,放在了同一个文件夹下,就像这样。

可是这种存储方式,每个电子书就一个文件夹,感觉太凌乱了,而且文件数目也增加了很多。我就想,是否有工具可以批量地将每个文件夹都进行压缩。后来又一想,何苦去找工具呢。先看看批处理能不能进行处理。

首先,就是要看是否有这样的一个命令行工具可以对文件夹进行压缩。现在7-Zip大家用的都很多。我所知道的是7-Zip是有专门的命令行工具包,但是大家用的都是直接安装的32位或64位的WIndows版本的7-Zip,所以也不清楚Windows版本的这个7-Zip是否支持命令行。 

那我们就来试验一下。7-Zip默认都是安装在Program Files下,如果是32位的是Program Files(x86)下。我们进入7-Zip了,我们看一下这个7z.exe。(7z.exe回车)

看起来是支持命令行的

我们看一下参数,有个a参数, 这是添加文件到压缩包里。还有个用法:7z,然后是命令应该是这个a,然后是压缩档的名字,然后是要压缩文件的名字。

我们试一下,这都是一个一个的文件夹,我们先试第一个吧。

L:\VOL1076-1080>for /d %X in (*) do "c:\Program Files\7-Zip\7z.exe" a abc.zip 一本不正经的博物志


看起来是可以的。下一步我们就要看一下怎么才能一个一个地读取文件夹。批处理有一个强大的命令,就是for命令。

for命令有固定的格式:

for %variable in () do command 

for in do三者缺一不可。in这里来指定些条件。%variable是变量名称,这里可以替换成%A %B %X %Y等等,是区分大小写的。这个变量是可以在command中来使用的,更细节的就不说了。 

for命令有一些参数,其中有/r,这个是用来进行递归的,但是用这个参数就有些复杂了。 

for命令还提供了一个/d的参数,这个参数不怎么使用,看起来也很鸡肋。它只是列举出相应的文件夹下的第一层目录,不会进行递归,但是这个恰恰是我们所需要的这种功能。我们也仅仅是把第一层目录列出来,然后一个一个地进行压缩。下面我们就来看一下,它怎么样能把第一层目录列举出来。

L:\VOL1076-1080>for /d %Xfor /d %X in (*) do echo "%X"


接下来,我们就把7z压缩的命令加进来。我们要用文件夹的名称作为压缩包的名称,而文件夹的名称很可能带有空格,所以我们也要加上双引号。%X这个变量就代表了这个文件夹的名称,我们再加上.zip作为压缩包的名称。

for /d %X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%X.zip" "%X" 

我们执行一下试试,看起来OK。


接下来我们将这个命令保存到一个批处理文件中。这里有一点要注意一下,在命令行窗口,变量名字前面是一个百分号,如果放到批处理文件中,我们要用两个百分号来表示这个变量名称,这里要注意一下。

好,我们来把这个命令放到批处理文件中试一下,名称就叫batchzip.bat吧。

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X" 

双击执行看一下,只对文件夹进行了压缩,单独的文件没有进行压缩。 

然后我们用7-Zip本身带的测试功能来测试一下压缩包有没有问题,未发现错误。 当测试没有问题的时候,我们就可以把文件夹都删掉,只保留zip就可以了。 

当需要看具体的电子书的时候,就可以搜索出来 然后解压缩看。如果有多少个文件夹都是这样的结构,就把batchzip.bat这个文件复制到对应的目录下,然后一个一个去执行就可以了。

当你有批量的事物要处理的时候,可以先想一想批处理能不能达成目的,然后再去寻找其他的途径。

今天就到这里 谢谢大家


更多精彩请关注公众号:

发表评论:

Powered By Z-BlogPHP 1.7.2

沪ICP备12032294号-1