|
gcdj
初级用户
积分 64
发帖 57
注册 2010-2-25
状态 离线
|
『楼 主』:
[问题已解决]求助 分别压缩文件夹下个个文件的批处理.
假设
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 ]
|
|
2010-3-1 15:12 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『第
2 楼』:
不知道能否满足你的要求
@echo off&setlocal enabledelayedexpansion
set "source=z:\work"
set "destination=z:\work_ok"
if not exist %destionation% ( md %destionation% )
for /f "delims=" %%i in ('dir/b/s %source%') do (
set size=%%~zi
if !size! gtr 10000000 (
makecab %%i %destination%\%%~ni.cab
)
)
|
|
2010-3-1 17:31 |
|
|
gcdj
初级用户
积分 64
发帖 57
注册 2010-2-25
状态 离线
|
『第
3 楼』:
Quote: | Originally posted by huahua0919 at 2010-3-1 17:31:
不知道能否满足你的要求
[code]
@echo off&setlocal enabledelayedexpansion
set "source=z:\work"
set "destination=z:\work_ok"
if not exist %destionation% ( md %d ... |
|
谢谢你的代码.
这个代码实行后为什么回多出一个 ")"的文件夹呢?
|
|
2010-3-2 07:44 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
4 楼』:
仿照2楼给你写个 ZIP 的
@echo off
set "source=z:\work"
set "destination=z:\work_ok"
set "ching=%temp%\~$ching$.tmp"
set /a size=10*1024*1024
if not exist "%destination%" md "%destination%"
> "%ching%" echo s=WScript.Arguments(0):z=WScript.Arguments(1)
>>"%ching%" echo Set a=CreateObject("Shell.Application")
>>"%ching%" echo Set f=CreateObject("Scripting.FileSystemObject")
>>"%ching%" echo f.OpenTextFile(z,2,True).Write "PK"^&Chr(5)^&Chr(6)^&String(18,Chr(0))
>>"%ching%" echo a.NameSpace(z).CopyHere s
>>"%ching%" echo Do Until a.NameSpace(z).Items.Count^>0:WScript.Sleep 421:Loop
>>"%ching%" echo WScript.Echo s^&" ==> "^&z
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
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2010-3-2 10:28 |
|
|
gcdj
初级用户
积分 64
发帖 57
注册 2010-2-25
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by qinchun36 at 2010-3-2 10:28:
仿照2楼给你写个 ZIP 的
[code]
@echo off
set "source=z:\work"
set "destination=z:\work_ok"
set "ching=%temp%\~$ching$.tmp"
set /a size=10*1024*1024
if ... |
|
谢谢你写的代码.我实验了一下.出现错误了.
C:\DOCUME~1\ddd\LOCALS~1\Temp\~$ching$.tmp(6,1) Microsoft VBScript
error:There is no object. :'a.NameSpace(...)'
|
|
2010-3-2 12:28 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
6 楼』:
。。。
没考虑到系统的性能,重新给你写一个
@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%"
> "%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
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
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2010-3-2 14:15 |
|
|
gcdj
初级用户
积分 64
发帖 57
注册 2010-2-25
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by qinchun36 at 2010-3-2 14:15:
。。。
没考虑到系统的性能,重新给你写一个
[code]@echo off
set "source=E:\feiqRecieved\hemiao"
set "destination=E:\feiqRecieved_ok"
set "ching=%temp ... |
|
厉害!~~~~~
多谢~~~
|
|
2010-3-2 17:02 |
|
|
gcdj
初级用户
积分 64
发帖 57
注册 2010-2-25
状态 离线
|
『第
8 楼』:
qinchun36 如果您有时间能不能吧每个命令都加上注释?我想学习一下您的代码。每一行都是干什么的,我弄不明白。
谢谢你!
|
|
2010-3-2 21:16 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
9 楼』:
本来是两个文件
Quote: | @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 |
|
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2010-3-3 09:43 |
|
|
gcdj
初级用户
积分 64
发帖 57
注册 2010-2-25
状态 离线
|
|
2010-3-3 17:52 |
|