@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 |
|