中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 16:04
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [问题已解决]求助 分别压缩文件夹下个个文件的批处理.
可打印版本  1,130 / 9
第1楼 gcdj 发表于 2010-03-01 15:12
初级用户 发帖 57 积分 64
[问题已解决]求助 分别压缩文件夹下个个文件的批处理.
假设
Z:盘里的文件夹"WORK" 里有5个文件大小不同的文件.

想做个批处理文件来实施,
压缩文件夹"WORK"里大于10MB的文件到Z盘的WORK_OK文件夹里.
要求每个文件要单独的压缩.
压缩的扩展名为最好是ZIP文件.如果麻烦的话CAB也可以.

条件是不能用任何软件.(`RAR`之类)
windowsXP系统.





Z:盘里的文件夹"WORK" 文件

A 20MB
B 8MB
C 9MB
D 12MB
E 22MB

批处理实行后Z盘的WORK_OK文件夹里

A.ZIP
D.ZIP
E.ZIP

请哪为高手帮我做一个!


我试验过makecab命令,可是怎么弄也弄不好.


dir Z:\work\log_work /b > Z:\work\log_work\b.txt
makecab /F Z:\work\log_work\b.txt /d compressiontype=mszip /d compressionmemory=21 /d maxdisksize=1024000000 /d diskdirectorytemplate=dd* /d cabinetnametemplate=dd*.cab
del Z:\work\log_work\setup.inf
del Z:\work\log_work\setup.rpt
del Z:\work\log_work\b.bat


Pause

[ Last edited by gcdj on 2010-7-1 at 07:50 ]
第2楼 huahua0919 发表于 2010-03-01 17:31
银牌会员 发帖 780 积分 1,608
不知道能否满足你的要求
第3楼 gcdj 发表于 2010-03-02 07:44
初级用户 发帖 57 积分 64
Originally posted by huahua0919 at 2010-3-1 17:31:
不知道能否满足你的要求
第4楼 qinchun36 发表于 2010-03-02 10:28
高级用户 发帖 400 积分 609
仿照2楼给你写个 ZIP 的
第5楼 gcdj 发表于 2010-03-02 12:28
初级用户 发帖 57 积分 64
Originally posted by qinchun36 at 2010-3-2 10:28:
仿照2楼给你写个 ZIP 的
第6楼 qinchun36 发表于 2010-03-02 14:15
高级用户 发帖 400 积分 609
。。。
没考虑到系统的性能,重新给你写一个
第7楼 gcdj 发表于 2010-03-02 17:02
初级用户 发帖 57 积分 64
Originally posted by qinchun36 at 2010-3-2 14:15:
。。。
没考虑到系统的性能,重新给你写一个
第8楼 gcdj 发表于 2010-03-02 21:16
初级用户 发帖 57 积分 64
qinchun36 如果您有时间能不能吧每个命令都加上注释?我想学习一下您的代码。每一行都是干什么的,我弄不明白。

谢谢你!
第9楼 qinchun36 发表于 2010-03-03 09:43
高级用户 发帖 400 积分 609
本来是两个文件

@echo off
:: 这四行是定义变量的值,源文件夹、目标文件夹、临时文件、限制大小
set "source=E:\feiqRecieved\hemiao"
set "destination=E:\feiqRecieved_ok"
set "ching=%temp%\~$ching$.tmp"
set /a size=10*1024*1024
:: 如果目标文件夹不存在则创建它
if not exist "%destination%" md "%destination%"
::下面5行是临时生成一个VBS文件,他才是真正进行压缩操作的
> "%ching%" echo s=WScript.Arguments(0):z=WScript.Arguments(1)
>>"%ching%" echo Set a=CreateObject("Shell.Application"):Set f=CreateObject("Scripting.FileSystemObject")
>>"%ching%" echo f.OpenTextFile(z,2,True).Write "PK"^&Chr(5)^&Chr(6)^&String(18,Chr(0)):a.NameSpace(z).CopyHere s
>>"%ching%" echo Do:If f.FileExists(z) Then:If a.NameSpace(z).Items.Count^>0 Then Exit Do:End If:End If:WScript.Sleep 421:Loop
>>"%ching%" echo WScript.Echo s^&" ==> "^&z
::通过DIR /B /S查出源文件夹下所有的文件,如果大小大于限制大小就调用VBS压缩它
for /f "delims=" %%i in ('dir/b/s "%source%"') do (
if %%~zi gtr %size% (
cscript -nologo -e:vbs "%ching%" "%%i" "%destination%\%%~nxi.zip"
)
)
del /q "%ching%"
echo ================== 完 成 ==================
pause>nul





's为第一个参数,z为第二个参数
'分别是原文件和ZIP文件(必须是全路径)
s=WScript.Arguments(0):z=WScript.Arguments(1)
'创建需要的对象
Set a=CreateObject("Shell.Application"):Set f=CreateObject("Scripting.FileSystemObject")
'创建一个空的ZIP文件,只有文件头,固定格式,不要问我为什么
f.OpenTextFile(z,2,True).Write "PK"&Chr(5)&Chr(6)&String(18,Chr(0))
'把一个用字符串s表示的路径指向的文件添加到zip文件z中
a.NameSpace(z).CopyHere s
'由于脚本是执行完就退出,而你的文件比较大,压缩可能还没完成
'因此需要监视一下是否已经生成文件z,并且看看他里面是不是有东西
Do
'如果存在文件(虽然之前已经创建,但是系统复制的时候会变成随机文件名,完成后再还原)
If f.FileExists(z) Then
'如果ZIP中文件数目大于0
If a.NameSpace(z).Items.Count>0 Then
'退出循环,表示已经成功
Exit Do
End If
End If
WScript.Sleep 421
Loop
'完成后的提示信息
WScript.Echo s&" ==> "&z
第10楼 gcdj 发表于 2010-03-03 17:52
初级用户 发帖 57 积分 64
弄明白拉,谢谢你详细说明。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023