Thursday, June 16, 2011

如何用total commander、7zip、python脚本实现批量压缩

起因是想在total commander中一键在当前文件夹下分别压缩多个文件夹,winrar就可以实现了,但是要多点好几下鼠标,有的时候真是没有更懒,只有最懒,此方法主要应用场景是图片打包成7z格式

压缩格式选择7z,zip最通用但是存在非ASCII文件名编码缺点,在linux和windows互换时有乱码问题,7z默认是unicode编码,所以一次搞定,就不用烦心转码的问题了。

准备工作是安装7zip,total commander,python,不详细解释了,默认你应该对total commander比较熟悉。

python代码如下:
import sys, subprocess
fp = open('list.txt', 'w+')
fl=[]
for x in sys.argv[1:]:
    zipfn = '{0}.7z'.format(x)
    fn = '{0}'.format(x)
    fl.append(zipfn)
    fl.append(fn)
    cmd = [r'c:\Program Files\7-Zip\7z.exe', 'a', '-t7z', '-mx0', zipfn, fn]
    subprocess.Popen(cmd)
fp.write('\n'.join(fl))
fp.close()
保存为batch_zip.py,存在路径c:\Python27\Scripts_own下

在total commander的工具栏右键,选择“改变”
新增一个如下的配置
命令:c:\Python27\python.exe
参数:c:\Python27\Scripts_own\batch_zip.py %Q%S
图标文件:C:\Program Files\7-Zip\7z.dll

在total commander的选择多个文件,单击创建的图标,就可以看到效果了

注:

  1. python、7zip都是默认安装路径,如果不同的话,需要在脚本和工具按钮配置中相应的修改
  2. %Q%S是total commander的参数,代表取出选中的文件,分别用引号包括,作为参数传递给执行命令
  3. 图标文件可以自己选择另外的可执行文件来替换
  4. python脚本中7zip的压缩参数选择了-mx0,这是无压缩打包模式,速度最快,对于图片打包来说,是最合适的,其他文件打包的话,可以去掉-mx0,采用默认模式压缩

No comments: