怎么把一个文件夹下边的文件都压缩成zip包

大大g 发布于 2013/11/10 23:05
阅读 3K+
收藏 3

我想把一个文件夹下边的所有文件都压缩成zip格式的压缩包(我是说这个文件夹下边的所有文件,包括这个文件夹里边的二级、三级文件夹内的文件,不管什么格式的),生成的压缩包要保存在各个文件原来的目录下。

请大神帮忙,有没有这个软件或者winrar命令可以实现?

以下是问题补充:

@大大g:忘记说了 压缩包的文件名要和原文件相同 (2013/11/11 12:49)
加载中
1
zhizhang007
zhizhang007
winrar.exe a -k -s -ibck d:\bak.zip d:\zip\

请先在cmd切到换到winrar所在目录下,执行;


0
明月照大江
明月照大江
~~命令行,如果写java我倒是会~~,类似于树的遍历
大大g
大大g
java也可以呀 怎么搞关键是
0
jingdor
jingdor
php 请找我
jingdor
jingdor
遍历 见一个压一个 0.0
大大g
大大g
高人  怎么弄?PHP
0
figer1
figer1

回复 @大大g :  

这几个需求小改一下就可以了,文件名匹配那里类似正则语法,
[a-z0-9]{32} 指的是32位长的小写字母或数值,可以根据需要改动。
不能拖目录上去是我忘记添加acceptfiles属性了,已经加上了。

import win.ui;
/*DSG{{*/
var winform = ..win.form( text="批量压缩工具";acceptfiles=1;bottom=433;max=false;right=562;border="dialog frame" )
winform.add( 
lbParttern={ bottom=126;text="文件名模式匹配:";left=35;top=103;transparent=1;z=6;right=127;cls="static" };
txtPath={ bottom=91;right=350;left=32;top=60;z=1;edge=1;cls="edit" };
chkDelete={ bottom=121;text="删除添加到压缩包的文件";left=293;top=104;z=8;right=473;cls="checkbox" };
txtLog={ bottom=402;right=531;left=32;multiline=1;top=147;z=4;vscroll=1;hscroll=1;edge=1;cls="edit" };
button={ bottom=90;color=0;text="开始压缩";left=447;top=59;z=5;right=530;cls="button" };
static={ bottom=44;right=209;left=31;top=27;transparent=1;z=2;text="请拖放待压缩目录到下面:";cls="static" };
txtParttern={ text="[a-z0-9]{32}";bottom=126;right=260;left=136;multiline=1;top=98;z=7;edge=1;cls="edit" };
btnDir={ bottom=90;text="浏览...";left=355;top=59;z=3;right=431;cls="button" }
)
/*}}*/

import fsys;
import zlib.zip;
zipDir = function(dir,findName,delFile){
    
    var files = {}; 
    fsys.enum( dir, "*.*",
        function(dir,filename,fullpath,findData){ 
            if(filename && ..string.match(filename,findName)){ 
                ..table.push(files,fullpath); 
            } 
        },false
    ); 
    
    var zipName = fsys.path.removeBackslash(dir) + ".zip"
    var zip = zlib.zip( zipName,dir );
    for(k,file in files ){
        for len in zip.eachWriteFile(file, , , ){ 
        } 
        
        if(delFile){ fsys.delete(file)}
    } 
    zip.close()
}


import fsys;
winform.button.oncommand = function(id,event){
    var path = io.fullpath(winform.txtPath.text);
    if(!#path){
         winform.msgboxErr("请指定正确目录","批量压缩工具");
         return;
    }
    
    var findName = winform.txtParttern.text;
    var delFile = winform.chkDelete.checked;
    zipDir(path,findName,delFile);
    fsys.enum( path, "*.*",
        function(dir,filename,fullpath,findData){  
        },
        function(dir){
            winform.txtLog.appendText(dir,'\r\n');
            zipDir(dir,findName,delFile);
            return true;
        } 
    );
    
}

import fsys.dlg;
winform.btnDir.oncommand = function(id,event){
    winform.txtPath.text = fsys.dlg.opendir(,winform.hwnd,"请选择待处理目录");
}

winform.wndproc = function(hwnd,message,wParam,lParam){
    select(message) { 
        case 0x233/*_WM_DROPFILES*/ { 
            winform.txtPath.text = win.getDropFile(wParam )[1]; 
        } 
    }
} 

winform.show() 
win.loopMessage();
以上是AAuto代码。


大大g
大大g
回复 @figer1 : 我上传了一个文件供测试用,你可以下载一下http://pan.baidu.com/s/1j9dtv
大大g
大大g
回复 @figer1 : 由下字数限制,只好分三条回复,下边的3条你可以连起来看。
大大g
大大g
回复 @figer1 : 2569cb9cd20a6519a225dbfa7f74917b.doc,就压缩生成一个2569cb9cd20a6519a225dbfa7f74917b.zip,生成的压缩包就放在37f0cb9cd20a6519a771dbfa7f74917b或2569cb9cd20a6519a225dbfa7f74917b.doc的同级目录内。 不知道你能不能明白。谢谢。
大大g
大大g
回复 @figer1 : 比如37f0cb9cd20a6519a771dbfa7f74917b这个文件夹,就压缩生成一个37f0cb9cd20a6519a771dbfa7f74917b.zip
大大g
大大g
回复 @figer1 : 最后那个代码是把所有符合要求的文件(不包括文件夹)都提取出来压缩到了一个包内。 我的意思是把某个文件夹内的所有符合要求的文件(或文件夹)都各自压缩一个包,就是说一个文件(或文件夹)一个包,而不是所有都压在一个包内。
下一页
0
小白小霸王
小白小霸王
java我写过哎
0
figer1
figer1

回复 @大大g :  其实很简单的,首先下载快手( 6.5MB绿色软件 )

一、新建一个源码工程

二、把上面的源码复制到 main.aau 的代码视图

三、最后,点击【发布】按钮生成EXE文件 就行了。

如果还有其他问题可留言

figer1
figer1
回复 @大大g : 上面的源码已根据你的需求更新。
大大g
大大g
就是你的代码还不能满足要求,我试了一下 1、文件夹或者文件名都是这么长的字符,如35daaadf2d3e20812365924781798402 要把某个文件夹内的所有名称(数字和字母组合)都是这么长的文件夹和文件都独立打包。 2、打包格式为ZIP。 3、压缩包文件名和原文件(或文件夹)名一样。 4、压缩包存放在原来文件的位置。 5、可以选择打包后是否删除原文件。
0
huan
huan
看着都累,windows下写个bat,linux下写个sh,很难么?
0
pendows
pendows

引用来自“huan”的答案

看着都累,windows下写个bat,linux下写个sh,很难么?
说这种话没有必要,即然对你说来不难,帮楼主写一个就是了。
楼主是要每个子目录下生成一个压缩包,winrar好象没这个参数。

 

0
OSC首席键客
OSC首席键客

压缩软件都有带那种命令行的接口的,向好压啊!就有,winrar也有吧!7z也有。

OSC首席键客
OSC首席键客
详解?比如好压,安装了就有个详细的CHM格式的命令行帮助文档,其他你可以去官方看看文档,什么的,我也不是熟。
大大g
大大g
愿听详解
0
氵共

dir temp /b /s >filst.txt

然后接下来就简单了

大大g
大大g
可以再具体些吗? QQ2622566020 高手
返回顶部
顶部